我有这样的查询:
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
我还有这些索引:
cookies(cookie, user_id)
-- 这是一个普通索引cookies(cookie)
-- 这是一个唯一索引
当我在 上执行查询(连同 EXPLAIN
) 时,它使用第二个索引:cookies(cookie)
。那么我怎样才能让它强制使用第一个索引呢? cookies(cookie, user_id)
最佳答案
如果 cookie
是一个唯一 索引,那么使用第一个索引就没有优势。如果 SELECT
中的任何列来自 cookies
表,则尤其如此。
无论如何,如果cookie
是唯一的,基本上处理是:
- 查找 cookie 值(非常快,使用索引)。
- 查找对应的cookie记录(真的很快,抓取一页)。
- 从用户中查找相应的记录(非常快,使用索引)。
第一个索引可能能够消除第二次提取。但是,唯一索引提供的附加信息可能会平衡这一点——无论哪种方式,查询都应该非常快。
关于mysql - 我怎样才能使查询强制使用这样的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213649/