gpt4 book ai didi

sql - 索引和多列主键

转载 作者:IT老高 更新时间:2023-10-28 23:44:13 27 4
gpt4 key购买 nike

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

PRIMARY KEY id (invoice, item)

在我的应用程序中,我也会经常在 item 上单独进行选择,而不是仅在 invoice 上进行选择。我假设我会从这些列的索引中受益。

当我定义以下内容时,MySQL 不会提示:

INDEX (invoice),
INDEX (item),
PRIMARY KEY id (invoice, item)

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

构成主键的列是否会自动单独索引?有没有比 DESCRIBE 更好的方法来探索我的表结构?

最佳答案

我对 mySql 上索引的内部结构并不十分熟悉,但在我熟悉的两个数据库供应商产品(MsSQL、Oracle)上,索引是平衡树结构,其节点被组织为一个有序的元组定义索引的列(在定义的序列中)

所以,除非 mySql 做的非常不同,(可能不是),任何复合索引(在多于一列上)可以被任何需要过滤或排序的查询使用 索引中列的子集,只要列的列表是兼容的,即如果列在排序时与完整索引中的列排序列表相同, 是完整索引列集的有序子集,从实际索引序列的开头开始,除了末尾没有间隙...

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

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

关于sql - 索引和多列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com