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

时间:2018-01-12 10:40:27

标签: mysql indexing database-performance non-clustered-index

我有一个表'活动' 。它包含大约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)创建多级索引,或者如果可能的话为这两列创建多级索引。如何使用查询创建多级索引?

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

SHOW indexes FROM activities;

多级索引和非聚集索引是否相同?

1 个答案:

答案 0 :(得分:1)

我不知道"多层次"索引是。但是有"复合"

之类的索引
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始终是一个唯一索引,它是"群集"与数据。也就是说,通过PK查找行非常有效。结构总是BTree。

"辅助键"也是BTrees,但叶节点包含PK。因此,需要第二次查找才能完成查询。 (这种区别很少值得。)

PK和/或辅助键可以是"复合"。

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

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

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

索引顺序

哎哟!近二十年来,我还没有听说过这种过时的索引方法。

该问题提供了一个链接,例如"多层次"的定义。索引。从中跑!改变学校。或至少明白IS不再被认为是可行的。

MySQL使用" BTrees"对于大多数索引。它是几十年前发明的,基本上消灭了Indexed Sequential。而且,在很大程度上,已经将Hashing作为磁盘上的索引技术消灭了。

MySQL的BTrees可以处理多个列,如上例所示。