mysql排序

MySQL 数据库性能优化之SQL优化【转】

自作多情 提交于 2019-12-04 07:52:14
优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 优化方法 改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标 常见误区 count(1)和count(primary_key) 优于 count(*) 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差,应为数据库对 count(*)

MySQL的那些坑

一曲冷凌霜 提交于 2019-12-04 02:15:03
1. 表名一定要区分大小写,不一致就会报错 2. 无隐式的类型转换 (比如对某数值进行排序时,原表字段存储却是varchar型,就会对该数值按字符串排序而非数值大小!) 3. group by 也能查询出非group by的字段,但是会改变记录数!随机取一条 4. 来源: https://www.cnblogs.com/skyEva/p/11828082.html

SQL 查询 SELECT

℡╲_俬逩灬. 提交于 2019-12-03 15:46:44
SQL 查询是通过SELECT SQL 语句 来完成的。SELECT可以说是SQL中最常用的语句了。你可以把SQL语句看作是英语语句,SELECT就是SQL中的关键字之一,除了SELECT之外,还有INSERT、DELETE、UPDATE等关键字,这些关键字是SQL的保留字,这样可以很方便地帮助我们分析理解SQL语句。我们在定义数据库表名、字段名和变量名时,要尽量避免使用这些保留字。 SELECT的作用是从一个表或多个表中检索出想要的数据行。本文极客教程主要讲解SELECT的基础查询,后面极客教程会介绍如何通过多个表的连接操作进行复杂的查询。 SELECT查询的基础语法 SELECT可以帮助我们从一个表或多个表中进行数据查询。我们知道一个数据表是由列(字段名)和行(数据行)组成的,我们要返回满足条件的数据行,就需要在SELECT后面加上我们想要查询的列名,可以是一列,也可以是多个列。如果你不知道所有列名都有什么,也可以检索所有列。 创建了一个王者荣耀英雄数据表,这张表里一共有69个英雄,23个属性值(不包括英雄名name)。SQL文件见 Github地址 。 数据表中这24个字段(除了id以外),分别代表的含义见下图。 查询列 如果我们想要对数据表中的某一列进行检索,在SELECT后面加上这个列的字段名即可。比如我们想要检索数据表中都有哪些英雄。 SELECT name FROM

Mysql 排序优化

左心房为你撑大大i 提交于 2019-12-03 04:58:27
原文链接: https://www.cnblogs.com/moss_tan_jun/p/6021822.html 为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法。因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度。下面我通过一些典型的SQL来说明哪些SQL可以利用索引减少排序,哪些SQL不能。假设t1表存在索引key1(key_part1,key_part2),key2(key2) a.可以利用索引避免排序的SQL 1 2 3 4 SELECT * FROM t1 ORDER BY key_part1,key_part2; SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2; SELECT * FROM t1 WHERE key_part1 > constant ORDER BY key_part1 ASC ; SELECT * FROM t1 WHERE key_part1 = constant1 AND key_part2 > constant2 ORDER BY key_part2; b.不能利用索引避免排序的SQL 1 2 3 4 5 6 7 8 9 10 11 //排序字段在多个索引中,无法使用索引排序

MySQL报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

我怕爱的太早我们不能终老 提交于 2019-12-03 04:26:57
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DESC' 如果你用的数据库是MySQL8.0,那么请将group by 改为order by,因为在8.0之前,group by 包含using filesort,而8.0开始是没有的,为了避免这种问题,8.0开始除了索引替换排序的优化思路之外的相关排序,我们都必须使用order by来进行。 来源: https://www.cnblogs.com/lsys/p/11777129.html

MySQL 多列排序

亡梦爱人 提交于 2019-12-02 23:30:27
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 MySQL NULL 使用带来的坑 MySQL AND 和 OR 联合使用带来的坑 MySQL 触发器的使用 数据准备: CREATE TABLE `teacher` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `age` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4; insert into `teacher` (`id`, `name`, `age`) values('1','seven','18'); insert into `teacher` (`id`, `name`, `age`) values('2','qingshan','20'); insert into `teacher` (`id`, `name`, `age`) values('3','zhangsan','33'); 比如我们对表中的数据先按照年龄,然后按照姓名排序,怎么写

Mysql中的排序规则utf8_bin,utf8_unicode_ci、utf8_general_ci的区别总结

匿名 (未验证) 提交于 2019-12-02 22:06:11
Mysql中utf8_general_ci与utf8_unicode_ci有什么区别呢?在编程语言中,通常用unicode对中文字符做处理,防止出现乱码,那么在MySQL里,为什么大家都使用utf8_general_ci而不是utf8_unicode_ci呢? 用了这么长时间,发现自己竟然不知道utf_bin和utf_general_ci这两者到底有什么区别。。 ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的; bin 是二进制, a 和 A 会别区别对待. 例如你运行: SELECT * FROM table WHERE txt = 'a' 那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以. utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。 utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果 utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容 一、官方文档说明 下面摘录一下Mysql 5.1中文手册中关于utf8_unicode_ci与utf8_general_ci的说明: 复制代码 代码如下: 如果你想使用gb2312编码

MySQL高级学习笔记

匿名 (未验证) 提交于 2019-12-02 22:06:11
1.二进制日志log-bin(主要用于主从复制) 2.错误日志log-error(默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等) 3.查询日志log(默认是关闭的,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源) 4.数据文件(目录/var/lib/mysql,frm文件存放表结构,myd文件存表表数据,myi文件存放表索引) mysql读sql从from开始解析,重组。 第一层客户端连接层 第二层管理服务层(包含连接池、sql接口、解析器&转化器、优化器、缓冲器) 第三层可拔插的数据库引擎层 第四层 文件系统存储层 总结 :和其他数据库相比,MySQL有点与众不同,他的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的 架构上, 插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离 。这种架构可以根据业务的需求和实际需要选 择合适的存储引擎。 块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示17和25之间的磁盘块,P3表示大于35的磁盘块。 真实的数据存在于叶子节点 即3、5、9、10、15、28、29、36、60、75、79、90、99。 非叶子节点不存储真是的数据,只存储指引搜索方向的数据项 ,如17、35并不真是存在于数据表中。

MySQL常用函数之ORDER BY

匿名 (未验证) 提交于 2019-12-02 22:06:11
ORDER BY 语句用于根据指定的列对结果集进行排序,语句默认(asc)按照升序对记录进行排序。 如果您希望按照降序对记录进行排序,可以使用 desc 关键字; ORDER BY写在WHERE之后。 一个学生信息表结构如下: sql语句(拿去直接用) -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', 'sunyan', '22', 'a', '1', '3', 'x'); INSERT INTO `student` VALUES ('2', 'liukan', '21', 'a', '3', '2', 'x'); INSERT INTO `student` VALUES ('3',