mysql - 我怎样才能使查询强制使用这样的索引?

标签 mysql sql indexing

我有这样的查询:

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记录(真的很快,抓取一页)。
  • 从用户中查找相应的记录(非常快,使用索引)。

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

关于mysql - 我怎样才能使查询强制使用这样的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213649/

相关文章:

javascript - 建立可搜索/过滤数据库?

php - 24 小时格式的日期和时间

mysql - 合并两个表中的列,然后与另一个表连接

mysql - SQL 中的累积和

mysql - 索引 bool 列与日期时间列的查询性能

arrays - 在 MATLAB 中用两个值替换向量值

javascript - 如何根据数据库值在组中设置默认选中的单选按钮?

mysql - 使用 SELECT 从第 n 位开始查询获胜者的 SQL

sql - 将带有图像的 Excel 数据导入 SQL Server

sql-server - 在这种情况下我应该使用索引吗?