max min优化

奇技淫巧!

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的索引方向走,

那么  1pid=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 |

image.png

type为ALL,显然对整张表扫描了一遍,然后用where来筛选pid=1087的

然而,先把pid=1087的找出来也要扫一遍,毕竟pid上没索引:

image.png

用index(primary)后:

image.png

虽然rows还是3044,但性能却好了:

image.png

 

改进后的速度虽然快,但语义已经非常不清晰,不建议这么做,仅仅是实验目的.

猜你喜欢

转载自blog.51cto.com/5660061/2376117