Mysql 索引中的漏洞是否会以某种方式影响数据库?

Mysql 索引中的漏洞是否会以某种方式影响数据库?,mysql,database,optimization,Mysql,Database,Optimization,在创建新索引时,人们似乎试图避免索引中的漏洞,通常使用自动递增。但是为什么呢?这背后的原因是什么?维修安全还是根本不漂亮? 因为在我的例子中,我假设创建一个图书目录数据库,出于一致性的原因,我希望确保图书表的索引与ISBN编号的片段相匹配,该编号对应于该出版商的第一版图书的出版编号。 然而,有些再版有自己的ISBN,但不会被视为一个图书实体,因此会产生漏洞。再版的数据将与第一版数据合并 我在phpMyAdmin中使用MySQL 5.7.23 这里是从表书和ISBN的结合处看我的目标 num_bo

在创建新索引时,人们似乎试图避免索引中的漏洞,通常使用自动递增。但是为什么呢?这背后的原因是什么?维修安全还是根本不漂亮? 因为在我的例子中,我假设创建一个图书目录数据库,出于一致性的原因,我希望确保图书表的索引与ISBN编号的片段相匹配,该编号对应于该出版商的第一版图书的出版编号。 然而,有些再版有自己的ISBN,但不会被视为一个图书实体,因此会产生漏洞。再版的数据将与第一版数据合并

我在phpMyAdmin中使用MySQL 5.7.23

这里是从表书和ISBN的结合处看我的目标

num_book | ISBN
--------------------------------
1        | XXX-X-XXXXXX-1-X
         | XXX-X-XXXXXX-5-X
         | XXX-X-XXXXXX-9-X
         | XXX-X-XXXXXX-14-X
2        | XXX-X-XXXXXX-2-X
3        | XXX-X-XXXXXX-3-X
         | XXX-X-XXXXXX-6-X
         | XXX-X-XXXXXX-8-X
4        | XXX-X-XXXXXX-4-X
7        | XXX-X-XXXXXX-7-X
         | XXX-X-XXXXXX-13-X
10       | XXX-X-XXXXXX-10-X
11       | XXX-X-XXXXXX-11-X
12       | XXX-X-XXXXXX-12-X
15       | XXX-X-XXXXXX-15-X
我打算使用带有这些有意孔的num_块作为table book的主键,然后与ISBN表连接。 指数将继续增加,但不一定是连续的,即1、2、3、4、7、10、11、12、15 我应该担心吗?为什么

提前感谢您的关注

编辑:正如斯凯里奇所说的,忘记了不能用0开始索引,更正了。
关于解释和草图的更多澄清和消除歧义添加了图例:它不是同一个表a,而是从两个表books和ISBN的连接处查看的,因此num_book value是唯一的,但可以绑定到多个ISBN。

我想您同时指的是几个不同的概念

主键和索引之间有区别

主键是一个逻辑概念-它提供对表中某一行的唯一、不变的引用。当其他实体引用主键时,它可能不为空

索引是一个物理概念——它是数据库在该列中查找条目的一种方式。您可以指定索引不为null且唯一

物理实现主键逻辑概念的常用方法是通过唯一的非空索引

下一个问题是如何分配主键;有两个候选项:自然键反映问题域中的实体,代理键由数据库自动分配

在实践中,很少有保证唯一、非空、不变的自然密钥——我对ISBN是如何分配的不太了解,因此无法判断它们是否合适。但我也看到过一些问题,比如社会保险号码被错误地输入系统,电话号码被更改,等等

代理项键由数据库引擎分配。它们通常是自动递增的整数,但也可以是UUID——只要它们保证唯一且不为空。自动递增整数之所以流行有几个原因

许多主键是使用聚集索引实现的。聚集索引会影响数据在磁盘上的存储顺序,因此,如果有聚集索引,在写入ID为1000的记录后插入ID为1的记录意味着对磁盘上的数据重新排序,这是非常昂贵的

间隙并不是一个真正的问题——只要按顺序插入即可

然而,这一逻辑来自20世纪80年代。当时,聚集索引明显快于非聚集索引。在现代硬件上,这在大多数情况下是不正确的


因此,只要您对ISBN的分配方式有信心,就没有明显的理由说明分配主键的方案会有问题。

主键必须是唯一的。。而且不是空的。。。如果num_book是您的主键,则不能分配空值或重复。value@scaisEdge非常感谢,因为第一次出版是n°0,所以我把原因放在0上;我几乎可以肯定这是不可能的,但我还是犯了错误,以确认这是不可能的。我澄清了解释和草图,因为当它呈现时,我们可以相信它属于相同的表格。但这是两个不同表之间的连接处的视图。这是我的错,我使用了错误的术语。自动增量int索引更快,因为条目小4字节,所以每个2K IO页面可以容纳更多条目。Auto increment没有漏洞,但这与性能无关,只是方便的产物。看见别担心,只要使用你的自然数据。洞是无关紧要的。非常感谢。这个问题问得很尴尬,但你消除了我的顾虑。