奇技淫巧!
min/max优化 在表中,一般都是经过优化的. 如下地区表
id |
area |
pid |
1 |
中国 |
0 |
2 |
北京 |
1 |
... |
||
3115 |
3113 |
我们查min(id), id是主键,查Min(id)非常快.
但是,pid上没有索引, 现在要求查询3113地区的min(id);
select min(id) from it_area where pid=69;
试想 id是有顺序的,(默认索引是升续排列), 因此,如果我们沿着id的索引方向走,
那么 第1个 pid=69的索引结点,他的id就正好是最小的id.
select id from it_area use index(primary) where pid=69 limit 1;
| 12 | 0.00128100 | select min(id) from it_area where pid=69 |
| 13 | 0.00017000 | select id from it_area use index(primary) where pid=69 limit 1 |
type为ALL,显然对整张表扫描了一遍,然后用where来筛选pid=1087的
然而,先把pid=1087的找出来也要扫一遍,毕竟pid上没索引:
用index(primary)后:
虽然rows还是3044,但性能却好了:
改进后的速度虽然快,但语义已经非常不清晰,不建议这么做,仅仅是实验目的.