Rumah > pembangunan bahagian belakang > tutorial php > 一直以为mysql在order条件建立索引是有效的,发现没效果.

一直以为mysql在order条件建立索引是有效的,发现没效果.

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2016-06-20 12:42:50
asal
970 orang telah melayarinya

EXPLAIN SELECT * 
FROM  `order2` 
WHERE 1 
ORDER BY  `create_time` DESC

全表扫描...


回复讨论(解决方案)

order里面的索引不是这么用的

你现在条件就是全表,不管有什么索引肯定也会全表来一遍

我理解order索引应该有两处用到
1.有limit的时候
2.order字段在select返回值中,这个比较复杂,就是返回里只有order字段;或者返回几个字段,这时索引必须是按这几个字段顺序的联合索引

order里面的索引不是这么用的

你现在条件就是全表,不管有什么索引肯定也会全表来一遍

我理解order索引应该有两处用到
1.有limit的时候
2.order字段在select返回值中,这个比较复杂,就是返回里只有order字段;或者返回几个字段,这时索引必须是按这几个字段顺序的联合索引



我刚刚用order 索引好像又有效,怪了,难道有垃圾数据影响了整张表的索引?(不同库,不同表)

加个索引条件 如 EXPLAIN SELECT * 
FROM  `order2` 
WHERE 1  and create_time>0
ORDER BY  `create_time` DESC

想起来了,如果你表里数据基数太小,或者分布不大,mysql查询优化器会去掉索引,执行全表扫描。
这种自动优化行为没有可预测性,在数据量比较小的时候就这样,有时用索引有时不用

想起来了,如果你表里数据基数太小,或者分布不大,mysql查询优化器会去掉索引,执行全表扫描。
这种自动优化行为没有可预测性,在数据量比较小的时候就这样,有时用索引有时不用


是啊,找到这个问题了
而且搜索条件查出数据太多也会全表扫描
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan