mysql - 两列索引 (A,B) 和索引 (B) 为常量时的 A 和 B 指南

标签 mysql sql performance indexing

基于此答案:https://stackoverflow.com/a/2349824/1382306

A 和 B 的用法是否有进一步的指导方针,或者它们是否同等重要?

我有一个 SELECT FROM table1, table2 WHERE table2.table1id = table1.id AND table2.constant = ?

就我而言,我知道吗?来自用户定义的变量。这有什么不同吗,因为它永远不会改变?

我能否碰碰运气并要求解释针对 (A,B) 和 (B) 所使用的逻辑,例如“找到所有具有 A 的 B,然后搜索所有 B”。

非常感谢!

最佳答案

你没有在你的问题中写任何问题,但我假设你想知道你应该使用什么样的索引。

table2 上,你应该在 (constant, table1id) 上有一个索引,在 table1 上你有你的主键 id 无论如何。如果您只从 table2 中选择几列,您也应该将它们包含在索引中。这样 MySQL 就可以直接从索引中回答您的查询,甚至无需加载 table2 的数据。它通过在索引中查找 constant 来做到这一点,它可以这样做是因为 constant 是索引的最左边的列,然后还加载 table1id从指数。如果发生这种情况,您可以在 EXPLAIN 的输出中看到 Using index

关于mysql - 两列索引 (A,B) 和索引 (B) 为常量时的 A 和 B 指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150630/

相关文章:

php - 如何在 PHP 中使用 PDO 获取结果数组?

php - 使用 MySQL 偏移时间

mysql - Hibernate实体标注时无法创建表?

sql - 如何在 sql 查询 Oracle Apex 中的列后添加新行

php - 安排 MySQL 查询

c# - 将字符添加/删除到字符串开头的最有效方法?

mysql - 数据库中的重复记录

java - 打破 @Query 的 LIMIT

mysql - 查询时间很长(包括解释)

c++ - 优化 C++ 中的模块化算术计算