繁体   English   中英

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

[英]How can I make a query force to use such an index?

我有这样的查询:

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

我也有这些索引:

  1. cookies(cookie, user_id) -这是一个普通索引
  2. cookies(cookie) -这是唯一索引

当我执行上面的查询(连同EXPLAIN )时 ,它使用第二个索引: cookies(cookie) 那么如何才能强制使用第一个索引? cookies(cookie, user_id)

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

无论如何,如果cookie是唯一的,则基本上是以下处理:

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

第一个索引可能能够消除第二个提取。 但是,唯一索引提供的其他信息可能会平衡这一点-无论哪种方式,查询都应该非常快。

使用FORCE INDEX(您的索引)

http://dev.mysql.com/doc/refman/5.7/zh-CN/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM