在条件mysql性能上大于vs

时间:2014-03-15 06:56:56

标签: mysql performance

我有帖子表,帖子的状态是tinyint,可以是1-10之间的数字。我需要选择那些具有这些数字的状态的帖子 - 6,7,8,9,10。那么,在性能方面哪种解决方案会更好

1) SELECT id, title, status FROM posts WHERE status > 5

2) SELECT id, title, status FROM posts WHERE status IN(6, 7, 8, 9, 10)

我没有使用OR列出,因为此答案IN更快

MYSQL OR vs IN performance

由于

更新

status列已编入索引

2 个答案:

答案 0 :(得分:1)

看到这个小提琴:http://sqlfiddle.com/#!2/346380/3

选择&lt ;:

Record Count: 2; Execution Time: 27ms

选择<解释:

ID  SELECT_TYPE TABLE   TYPE    POSSIBLE_KEYS   KEY KEY_LEN REF ROWS    EXTRA
1   SIMPLE  supportContacts range   helper  helper  5   (null)  2   Using where

选择IN:

Record Count: 2; Execution Time: 1ms 

选择IN说明:

ID  SELECT_TYPE TABLE   TYPE    POSSIBLE_KEYS   KEY KEY_LEN REF ROWS    EXTRA
1   SIMPLE  supportContacts ref helper  helper  5   const   2   Using where

正如大多数人所说,TYPE ref会比range更快。所以我相信后者会更快。

这应该是一个很好的阅读:Write better SQL queries with Explain

答案 1 :(得分:0)

我希望IN子句略快一些,因为它可以使用给定的值作为索引的直接键,从而使用行。

使用GT将至少有一个额外的操作来确定所有这些键。

但是majimboos方法很慷慨:使用EXPLAIN来看看具体情况会发生什么。