mysql - 主键和索引在同一个表上

标签 mysql indexing primary-key

我使用此查询创建了一个表:

create table tblz ( id int not null auto_increment primary key, code varchar(20))

然后我添加了一个索引:

alter table tblz add index codeind (code)

我添加了 4 条记录:

insert into tblz (code) values ('')

<p>insert into tblz (code) values ('Y')</p> <p>insert into tblz (code) values ('Z')</p>

insert into tblz (code) values ('')

然后之后 select * from tblz :

这是结果:

<p>+----+------+</p> <p>| id | code |</p> <p>+----+------+</p> <p>| 1 | |</p> <p>| 4 | |</p> <p>| 2 | Y |</p> <p>| 3 | Z |</p> <p>+----+------+</p>

我的问题是: 由于这个问题Is the primary key automatically indexed in MySQL?主键是聚集索引,那么为什么MySQL不根据主键值来排列记录呢?还是只根据添加的索引来排列记录,而不管聚集索引?

最佳答案

MySQL says该行结果以“无特定顺序”返回。实际的检索顺序取决于引擎,但不保证任何特定的排序。您需要使用 ORDER BY (警告 - 它可能会很慢,尤其是对于大型结果集)或对检索数据的任何内容进行排序。

PRIMARY KEY 已建立索引。 KEYINDEX 是同义词,尽管没有 PRIMARY INDEX 语法,但创建的任何键都会被索引。

关于mysql - 主键和索引在同一个表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19256892/

相关文章:

mysql - 如何从 table1 中选择 table1.id 存在于 table2 的 id 列中的记录?

php - 如何在 PHP/MySQL Web 应用程序中实现计划事件

mysql - 如何在映射到 mysql 中的 varbinary 值的 byte[] hibernate 实体上创建 Id

postgresql - integer out of range 剩余磁盘空间太小无法将id转换为bigint等解决方法

php - 将mysql返回的值存储在php变量中

mysql - 如果值永远为真,则 SQL 返回结果

c - C 中的指针索引是什么,它们引用什么?

python - Varchar 字段上的 MySQL 唯一索引 - 优点和缺点?

c++ - 在 C++ 中获取对象的数组索引

mysql - 在外键表中使用主键作为外键