150W 条记录的一个订单表。
mysql> select * from orders where error_status
= 0 AND line_id
= 0 limit 1;
1 row in set (0.01 sec)
mysql> select * from orders where error_status
= 0 AND line_id
= 0 and version
=3 limit 1; 1 row in set (10.01 sec)
以上两个查询效率相差太大了, error_status , line_id 都建了索引,就加了一个 version 的条件。
version 为 tinyint 型的基数比较小,只有 0 , 1 , 2 , 3 这 4 个值。
尝试 version 添加索引,对查询效率没有提高。
有人指点下,为啥加了 version 就特别慢
1
kn007 2015-12-19 22:08:57 +08:00
试试联合索引?
忘记哪个脚本有索引建立推荐。。。 |
2
msg7086 2015-12-19 22:14:35 +08:00
后者要用 (error_status, line_id, version) 联合索引。
|
3
billlee 2015-12-19 22:45:38 +08:00
先 EXPLAIN 看一下
|
4
shiny 2015-12-19 22:47:01 +08:00
前一条有没有 Query Cache?先 explain 吧……
|
5
holyghost 2015-12-19 22:51:05 +08:00
我不太懂,但是感觉 5.6 可以用 index condition pushdown 解决一部分这样的问题。
求轻打脸。 |
6
lenran 2015-12-19 22:55:46 +08:00
version 字段唯一性不高,不应该创建索引吧
|
7
test1199 2015-12-19 23:48:43 +08:00
语句顺序: version 放前边, 那俩有索引得放后边
|
9
jsrgqinbin OP @test1199 试过,效果一样
|
10
jsrgqinbin OP @billlee 使用的索引以及影响的行数是一样的
|
11
toben 2015-12-21 16:03:47 +08:00
感觉只有这 3 个字段的联合索引会变快=.=!
|