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

索引和多列主键

锺离飞鸣
2023-03-14
问题内容

经过搜索,没有找到这个特定的菜鸟问题的答案。如果我错过了,我深表歉意。

在MySQL数据库中,我有一个带有以下主键的表

主键ID(发票,项目)

在我的应用程序中,我也会经常自己选择“项目”,而很少选择“发票”。我假设我将从这些列的索引中受益。

当我定义以下内容时,MySQL不会抱怨:

索引(发票),索引(项目),主键ID(发票,项目)

但是,我没有看到任何证据(使用DESCRIBE-我知道如何查找的唯一方法)为这两列建立了单独的索引。

因此,问题是,构成主键的列是否会自动分别索引?另外,有没有比DESCRIBE更好的方法来探索我的桌子的结构?


问题答案:

我不是很熟悉mySql上的索引内部,但是在我熟悉的两个数据库供应商产品(MsSQL,Oracle)上,索引是balance-
Tree结构,其节点被组织为列的顺序元组。索引定义在( 在定义的序列中

因此,除非mySql的操作方式大不相同((可能不是)),只要需要按索引中列的 子集 进行过滤或排序的任何查询,
可以使用任何复合索引(在多个列上)。列列表是兼容的,即,如果列的排序顺序与完整索引中列的排序列表相同,则该列是完整索引列集的有序子集,该索引集从实际索引序列的开头开始,除了最后没有差距…
__

换句话说,这意味着如果在(a,b,c,d)上有索引,则对(a),(a,b)或(a,b,c)进行筛选的查询也可以使用索引,但需要过滤(b)或(c)或(b,c)的查询将无法使用索引…

因此,在您的情况下,如果您经常需要单独对列 项目 进行过滤或排序,则需要单独在该列上添加另一个索引…



 类似资料:
  • 问题内容: 我在MySQL数据库中有下表: SQL将如下所示: 如您所见,我同时创建了primaryId和和imgDate索引键。我的想法是,该WHERE子句使用primaryId,而ORDER子句使用来查询结果imgDate。 我的问题是,现在使用多索引会更好吗?还是我应该使用多列索引(目前我不太了解)? 这是我从EXPLAIN得到的: 注意:这不是使用多列索引,这是使用上表说明的结果。 问题答

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是

  • 我创建了一个带有主键(UsersID、AccountsID)的帐户/用户表,如下所示。我是否应该为Users表添加索引?

  • 问题内容: 为要求和的列创建索引比没有索引快吗? 问题答案: 抱歉,不清楚您要问什么。 您是否在询问,是否会加快查询速度,例如 是否添加了数量指标? 如果这是问题,那么答案是否定的。一般而言,当您需要在多行中查找几行时,索引会很有用;这里您需要所有行,因此索引无济于事。 有一个晦涩的例外(这种例外情况适用,因此大多数数据库优化器很少会不介意实施此技巧)。如果您的查询碰巧是 ,其中在foo上有一个索

  • 本文向大家介绍MySQL索引之主键索引,包括了MySQL索引之主键索引的使用技巧和注意事项,需要的朋友参考一下 在MySQL里,主键索引和辅助索引分别是什么意思,有什么区别? 上次的分享我们介绍了聚集索引和非聚集索引的区别,本次我们继续介绍主键索引和辅助索引的区别。 1、主键索引 主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没

  • 本文向大家介绍主键、外键和索引的区别?相关面试题,主要包含被问及主键、外键和索引的区别?时的应答技巧和注意事项,需要的朋友参考一下 主键、外键和索引的区别 定义: 主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引–该字段没有重复值,但可以有一个空值 作用: 主键–用来保证数据完整性 外键–用来和其他表建立联系用的 索引–是提高查