当前位置: 首页 > 面试题库 >

MySQL可以对单个查询使用多个索引吗?

汪耀
2023-03-14
问题内容

想象一个有多列的表,例如id, a, b, c, d, e。我通常按​​进行选择id,但是,客户端应用程序中有多个查询,它们对列的子集使用各种条件。

当MySQL在多列有多个WHERE条件的单个表上执行查询时,它真的可以利用在不同列上创建的索引吗?还是使其快速的唯一方法是为所有可能的查询创建多列索引?


问题答案:

是的,MySQL可以对单个查询使用多个索引。优化器将确定哪些索引将使查询受益。您可以EXPLAIN用来获取有关MySQL如何执行语句的信息。您可以使用如下提示来添加或忽略索引:

SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX FOR ORDER BY (i2) ORDER BY a;

我建议阅读有关MySQL如何使用索引的内容。

只是摘录:

如果可以在多个索引之间进行选择,则MySQL通常会使用查找最少行数的索引。

如果col1和col2上存在多列索引,则可以直接获取适当的行。如果col1和col2上存在单独的单列索引,则优化器将尝试使用索引合并优化(请参见第8.2.1.4节“索引合并优化”),或尝试通过确定哪个索引发现的索引较少而找到限制性最强的索引。行并使用该索引来获取行。



 类似资料:
  • 问题内容: 我有一个带有3个索引的elasticsearch集群: 因此,现在我需要运行处理多个索引的查询。 例如: 获取在页面X中注册的用户的性别。 ( 要获取此信息,我需要来自多个索引的信息。 ) 这可能吗?也许整合Hadoop? 问题答案: 在Elasticsearch本身中,这非常容易!任何时候您指定索引时,都可以用逗号分隔其他索引。 您也可以使用_all搜索所有索引。 这是来自Elast

  • 问题内容: 这是查询: 现在,如果我在字段上添加了带有多列的索引: MySQL将利用此多列索引吗?还是不使用它,因为一个字段位于where子句中,而另一个字段位于order语句中?还是只要我按多列索引的顺序使用字段就没关系吗? 问题答案: 好问题。 索引从左到右起作用,因此您的条件将使用索引。在这种情况下,排序也将利用索引(下面的执行计划)。 从手册: 即使索引与索引不完全匹配,也可以使用索引,只

  • 我有一个AWS DynamoDb购物车表,其项目结构如下- - 该表将作为主键, 作为索引或GSI, 作为索引或GSI。 我希望能够查询购物车表, 查找的项目。 我不知道这是否意味着查询- 我知道AWS DynamoDb表不能同时使用多个索引进行查询, 我遇到了以下问题,它有一个类似的用例,答案是建议创建一个复合键, 使用多个本地辅助索引DynamoDb进行查询 这是否意味着在将新项放入表中时,

  • 问题内容: 我想轻松删除多个表,而无需在删除查询中实际列出表名,并且要删除的表的前缀为“ wp_” 问题答案: 只需分享其中一种解决方案: mysql> SELECT CONCAT(“ DROP TABLE”, GROUP_CONCAT(TABLE_NAME))as stmt 从information_schema.TABLES WHERE TABLE_SCHEMA =“ your_db_name

  • 我希望使用DynamoDB表来请求我在查询中创建的二级索引。 从现在开始,对于我正在做的一个二级索引: 我会像这样构建我的KeyConditionExpression: 我读了一遍又一遍这份文件,但我不知道怎么做: https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/gettingstartedguide/GettingStarted.P

  • 我正在通过猫鼬使用MongoDB。 > MongoDB是执行集合扫描还是索引有助于提高查询效率?查询是否与仅使用id字段有任何不同? 如果MongoDB在您查询非索引字段时进行集合扫描。如果集合扫描完全相同,查询多个非索引字段是否会加快查询速度?假设我查询五个非索引字段而不是两个(都返回相同的文档)。两个查询是否都进行相同的集合扫描?