mysql - 如果查询的最后一个字段是 MySQL,是否需要索引表的一列?

标签 mysql sql hibernate indexing

假设我有一个包含 3 列(c1、c2、c3)的表 (t1),并且我添加了如下索引:

ALTER TABLE `t1` ADD INDEX `IDX_c1_c2` USING BTREE (`c1`, `c2`);

我知道如果我使这个查询使用索引并且工作完美:

SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar"

但是,这个查询呢?:

SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 = "foobar"

MySQL引擎会为了提高查询而使用索引还是会忽略索引?我的意思是,整个查询必须与索引匹配才能使用索引,或者我可以利用查询前两列的索引。

[UPDATE] - 最后一个查询,实际上是这样的(日期只是一个例子):

SELECT * FROM `t1` where c1 = "foo" AND c2 = "bar" AND c3 > "2016-11-26 07:37:47"

最佳答案

为了简单起见,您的现有索引仍将被使用,但是第三列将被独立解析。查询处理器将生成一些计划,最好的计划将被引擎接受以继续进行。仍然将第三列也作为索引肯定会夸耀性能。

建议 如果您在查询中使用相等条件,请使用基于散列的索引而不是 Btree

关于mysql - 如果查询的最后一个字段是 MySQL,是否需要索引表的一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40917969/

相关文章:

database - 如何在 Hibernate 查询中使用数据库索引

mysql - mySQL 中的字段类型

mysql - Wordpress MU+MAMP 建立数据库连接时出错

java - 应用程序服务器线程和 JPA/Hibernate 乐观锁定 - OptimisticLockException

hibernate - 为什么 hibernate 在 SAVE 之前执行 SELECT?

SQL:连接 3 个表,还需要将第 3 个表连接到自身

MySQL位反转,如何只取反前x位?

mysql - php 数据库插入未按计划工作

c# - Dapper:将行插入表变量

mysql - 如何在 UNION 中使用 ORDER BY