我有一张桌子'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),或者可能的话为这两列创建索引。如何使用查询创建多级索引?
如何查找表中多层索引的列?我尝试过这个查询,但是它只显示了被索引的列,
SHOW indexes FROM activities;多级索引和非聚集索引是否都是相同的?
发布于 2018-01-12 15:09:29
我不知道什么是“多层次”指数。但是有一些“复合”索引,如
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“。它是几十年前发明的,基本上消灭了索引顺序。而且,在很大程度上,散列作为一种磁盘索引技术已经被淘汰。
MySQL的BTrees可以处理多个列,如上面的示例所示。
https://stackoverflow.com/questions/48224527
复制相似问题