如何在 MySql 中创建多级索引以及如何找出列是多级索引的?

How to Create Multi-level Index in MySql and how to find out a column is Multi-level indexed?

我有一个table'activities'。它包含大约 100 万条记录。它的列包括关闭,

id(PK), u_id(FK), cl_id(FK), activity_log

默认情况下,id(PK) 已编入索引,我已使用

为 u_id 和 cl_id 创建了自己的索引
ALTER TABLE activities ADD INDEX(u_id,cl_id);

现在我想为 cl_id(FK) 或 id(PK) 或两个列创建一个 多级索引 ,如果可能的话。如何使用查询创建多级索引?

如何找出table中多级索引的列?我试过这个查询,但它只显示索引的列,

SHOW indexes FROM activities;

多级索引和非聚集索引是一样的吗?

我不知道什么是 "multi-level" 索引。但是有"composite"个索引比如

INDEX(last_name, first_name)

这对

非常有用
WHERE last_name = 'James'
  AND first_name = 'Rick'

甚至

WHERE last_name = 'James'
  AND first_name LIKE 'R%'

在MySQL(尤其是InnoDB)中,PRIMARY KEY始终是一个唯一索引,它与数据是"clustered"。即按PK查找一行,效率很高。结构始终是 BTree。

"Secondary keys"也是B树,但是叶子节点包含PK。因此,需要进行第二次查找才能完成查询。 (这种区别很少一文不值。)

PK and/or 辅助键可以是 "composite".

如果还没有一些合适的(PRIMARY 或二级)索引以 FK 中的列开头,则声明 FOREIGN KEY 添加二级索引。

以下是多余的,应该避免:

PRIMARY KEY(id),
INDEX(id)           -- DROP this

索引顺序

哎呀!我已经将近二十年没有听说过这种过时的索引方法了。

该问题给出了 link 诸如 "multi-level" 索引的定义。 运行起啦!换学校。或者至少明白 IS 不再被认为是可行的。

MySQL 使用 "BTrees" 进行大多数索引。它是几十年前发明的,基本上消灭了 Indexed Sequential。并且,在很大程度上,已经消除了作为磁盘索引技术的散列。

MySQL 的 BTrees 可以处理多列,就像我上面的例子一样。