首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySql中创建多级索引,以及如何找到多层索引的列?

如何在MySql中创建多级索引,以及如何找到多层索引的列?
EN

Stack Overflow用户
提问于 2018-01-12 10:40:27
回答 1查看 1.1K关注 0票数 0

我有一张桌子'activities'。它由大约100万条记录组成。它的列是开的,

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

默认情况下,id(PK)是索引的,我已经为u_id和cl_id创建了自己的索引,

代码语言:javascript
复制
ALTER TABLE activities ADD INDEX(u_id,cl_id);

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

如何查找表中多层索引的列?我尝试过这个查询,但是它只显示了被索引的列,

代码语言:javascript
复制
SHOW indexes FROM activities;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-12 15:09:29

我不知道什么是“多层次”指数。但是有一些“复合”索引,如

代码语言:javascript
复制
INDEX(last_name, first_name)

是非常有用的

代码语言:javascript
复制
WHERE last_name = 'James'
  AND first_name = 'Rick'

甚至是

代码语言:javascript
复制
WHERE last_name = 'James'
  AND first_name LIKE 'R%'

在MySQL (特别是InnoDB)中,PRIMARY KEY始终是唯一的索引,它与数据“聚集”在一起。也就是说,通过PK查找一行是非常有效的。结构总是BTree。

“辅助键”也是BTrees,但是叶节点包含PK。因此,需要进行第二次查找才能完成查询。(这种区别几乎不值钱。)

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

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

以下是多余的,应避免:

代码语言:javascript
复制
PRIMARY KEY(id),
INDEX(id)           -- DROP this

索引顺序

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

这个问题给出了一个链接,例如“多层次”索引的定义。快跑!换学校。或者至少要明白IS不再被认为是可行的。

MySQL在大多数索引中使用"BTrees“。它是几十年前发明的,基本上消灭了索引顺序。而且,在很大程度上,散列作为一种磁盘索引技术已经被淘汰。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48224527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档