我在mysql中使用大量数据集时遇到了麻烦,我正在探索许多不同的索引方法.任何人都可以告诉我,如果我一起声明几个索引有什么区别
ALTER TABLE `db`.`test` ADD INDEX `someindex` (field1, field2, field3);
Run Code Online (Sandbox Code Playgroud)
而不是单独声明它们?
ALTER TABLE `db`.`test` ADD INDEX `f1` (field1), ADD INDEX `f2` (field2);
Run Code Online (Sandbox Code Playgroud)
为什么要一起或单独声明它们?
我教MySQL培训课程,在讨论多列索引时,我使用类比电话簿.电话簿基本上是姓氏的索引,然后是名字.因此排序顺序取决于哪个"列"是第一个.搜索分为几类:
如果你有一个按姓氏和姓氏排序的电话簿,那么书的分类将有助于你进入上述案例#2和#3,但不是案例#1.
这解释了查找确切值的情况,但如果您按值范围查找会怎么样?假设你想找到所有姓名为John且姓氏以'S'开头的人(Smith,Saunders,Staunton,Sherman等).约翰斯在每个姓氏中都按J排序,但是如果你想要所有姓氏的所有姓氏都以S开头,则约翰斯不会归为一组.它们再次分散,因此您最终必须扫描姓氏以"S"开头的所有姓名.如果电话簿是按名字和姓氏组织的,那么你会找到所有的约翰斯,然后在约翰内,所有的S姓都将被组合在一起.
因此,多列索引中列的顺序绝对重要.一种类型的查询可能需要索引的特定列顺序.如果您有多种类型的查询,则可能需要多个索引来帮助它们,并且列具有不同的顺序.
有关更多详细信息和示例,请参阅我的演示文稿如何设计索引,真的.或观看视频演示.
| 归档时间: |
|
| 查看次数: |
947 次 |
| 最近记录: |