Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84350
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 340
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-02 20:25
文章分类

全部博文(31)

文章存档

2015年(2)

2014年(29)

我的朋友

分类: Mysql/postgreSQL

2014-08-25 19:46:14

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) |
0

上一篇:2. join

下一篇:4. Prepared statement

给主人留下些什么吧!~~