如何使查询强制使用这样的索引?

时间:2016-07-05 22:10:24

标签: mysql sql indexing

我有这样的查询:

BachelorsDegrees

我也有这些索引:

  1. SELECT u.id, user_fname, user_lname, reputation, email, events FROM users u INNER JOIN cookies c ON u.id = c.user_id WHERE c.cookie = $token - 这是正常索引
  2. cookies(cookie, user_id) - 这是一个独特的索引
  3. 当我在上面执行查询(以及cookies(cookie)时,它会使用第二个索引:EXPLAIN。那我怎么能强制使用第一个索引呢? cookies(cookie)

2 个答案:

答案 0 :(得分:2)

如果cookie唯一索引,则使用第一个索引没有任何优势。如果SELECT中的任何列来自cookies表,则尤其如此。

在任何情况下,如果cookie是唯一的,那么基本上处理是:

  • 查找cookie值(非常快,使用索引)。
  • 查找相应的Cookie记录(非常快,可以获取一页)。
  • 从用户那里查找相应的记录(非常快,使用索引)。

第一个索引可能能够消除第二次获取。但是,唯一索引提供的附加信息可能会平衡这一点 - 无论如何,查询应该非常快。

答案 1 :(得分:1)

使用FORCE INDEX(your_index)

http://dev.mysql.com/doc/refman/5.7/en/index-hints.html

 SELECT u.id, user_fname, user_lname, reputation, email, events
 FROM users u
 INNER JOIN cookies c ON u.id = c.user_id
 FORCE INDEX (your_index) 
 WHERE c.cookie = $token