我有一个表'活动' 。它包含大约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;
多级索引和非聚集索引是否相同?
答案 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可以处理多个列,如上例所示。