order

mysql 优化order by

扶醉桌前 提交于 2019-12-09 18:59:36
MySQL 中有两种排序方式: 1. 通过有序索引扫描直接返回有序数据 ,这种方式在使用explain分析查询的时候显示为using index, 不需要额外的排序,操作效率较高。 mysql> explain select start_time from warning_repaired order by start_time desc\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: warning_repaired type: index possible_keys: NULL key: start_time key_len: 5 ref: NULL rows: 499471 Extra: Using index 1 row in set (0.00 sec) 2. 通过对返回数据进行排序,也就是通常所说的filesort排序 ,所有不是通过索引直接返回排序结果的排序 都叫filesort排序。 filesort并不代表通过磁盘文件进行排序,而只是进行了一个排序操作,至于排序操作 是否使用了磁盘文件或者临时表等,则取决于MySQL服务器对排序参数的设置和需要排序数据的大小。 mysql> explain select * from

MySQL如何利用索引优化ORDER BY排序语句

随声附和 提交于 2019-11-28 17:08:40
1.MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化 : 1、ORDER BY的索引优化。如果一个SQL语句形如: SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort]; 在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。 2、WHERE + ORDER BY的索引优化,形如: SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort]; 建立一个联合索引(columnX,sort)来实现order by 优化。 注意:如果columnX对应多个值,如下面语句就无法利用索引来实现order by的优化 SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort]; 3、WHERE+ 多个字段ORDER BY SELECT * FROM [table]

mysql索引的要点分析

北慕城南 提交于 2019-11-28 14:56:11
mysql的索引并不是很好总结,所以日常工作中大家应该多使用 explain 来优化自己的查询和索引,做到用最少的索引来配合最高效的查询语句完整业务需求,这里我总结一些平日里遇到的比较多变的索引问题:组合索引的设计问题, order by 如何利用索引 1、最左前缀原则 应用场景:频繁对多列进行联合检索,可做组合索引 例如我们创建了 name email nick 的组合索引 name_email_nick 要想使用此索引则必须遵循 最左前缀 原则,说的简单些就是 检索条件集 可以从左到右的优先级次序匹对 组合索引的列序 可以看出组合索引其实是为每一个子列建立的索引,然后以 seq_in_index 的位序连接在一起,当你想让自己的查询能启用此索引,则最基本的一条就是最左前缀,按位序可以依次满足,中间不存在位序间断 拿此例来说,左前缀的组合方式有(注意,这里是条件集的最终拼接结果,并不是条件位序): 1 1,2 1,2,3 而 2 3 2,3 都不满足最左前缀原则 实例: name 使用一个 name email 使用两个 name email nick 使用三个 再次强调最左前缀与检索条件的书写顺序无关,只要能满足从左开始不间断的满足组合索引的子列位序即可 如上图所示,检索条件的位序虽然与组合索引的不同,但并不影响 最左前缀