mahemoff Asked: 2015-05-15 08:38:08 +0800 CST2015-05-15 08:38:08 +0800 CST 2015-05-15 08:38:08 +0800 CST 没有任何参数的 MySQL“USE INDEX()”有什么作用? 772 在USE INDEX()这里有什么影响吗? SELECT `posts`.`id` FROM posts USE INDEX() where `posts`.`size` > 1024; (我目前在某些 SQL 中使用它,因为查询是根据特定条件以编程方式构建的。) mysql index 1 个回答 Voted Best Answer Jehad Keriaki 2015-05-15T09:09:29+08:002015-05-15T09:09:29+08:00 我刚刚做了一个测试,显然它强制查询不使用任何索引: mysql> explain select email from B2 where length(email)>30; +----+-------------+-------+-------+---------------+-------+---------+------+--------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+-------+---------+------+--------+--------------------------+ | 1 | SIMPLE | B2 | index | NULL | email | 67 | NULL | 118097 | Using where; Using index | +----+-------------+-------+-------+---------------+-------+---------+------+--------+--------------------------+ 1 row in set (0.00 sec) mysql> explain select email from B2 use index() where length(email)>30; +----+-------------+-------+------+---------------+------+---------+------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+--------+-------------+ | 1 | SIMPLE | B2 | ALL | NULL | NULL | NULL | NULL | 118097 | Using where | +----+-------------+-------+------+---------------+------+---------+------+--------+-------------+ 1 row in set (0.00 sec) 所以,如果它是空的,你应该删除这个子句。 另一方面,我认为除了极少数情况外,你不应该强制使用索引。如果您注意到查询使用的索引不是最优的,您最好分析情况,了解为什么会发生这种情况,然后修复它。(有时,optimize会做的工作)
我刚刚做了一个测试,显然它强制查询不使用任何索引:
所以,如果它是空的,你应该删除这个子句。
另一方面,我认为除了极少数情况外,你不应该强制使用索引。如果您注意到查询使用的索引不是最优的,您最好分析情况,了解为什么会发生这种情况,然后修复它。(有时,
optimize
会做的工作)