1. 排序是个费时的操作,所以能避免的尽量避免
2. 索引自身是有序的,如果按索引查询数据,并且order by列为该索引的话,则结果不需要排序
3. 在非聚集索引下,优化器可能会选择全表扫描,从而导致结果需要排序。此时可选择force index。或者对select后面的字段建立覆盖索引避免全表扫描。
4. 如果order by后面出现多个索引字段,注意leftmost规则
5. 一升一降是很难优化的
6. 排序可有两种,一种是先把排序字段跟数据指针查出来,对其排序然后再查一遍数据。这方法内存消耗小,但是需要两次读表。
7. 还有一种进行把全部数据读出来,然后排序。
8. 不走索引的排序会在extra中出现using filesort。有时甚至出现using temporary,这通常因为join操作,而排序字段为非驱动表的字段
9. max_length_for_sort_data,如果返回的结果大于该参数值,则选择第一种排序方式。很显然select *这种方式应该摒弃。
10. sort_buffer_size决定了是否使用临时表。
阅读(796) | 评论(0) | 转发(0) |