我有帖子表,帖子的状态是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
更快
由于
更新
status
列已编入索引
答案 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来看看具体情况会发生什么。