当前位置:   article > 正文

Mysql唯一索引、主键索引、联合索引_联合唯一索引

联合唯一索引

数据库索引都有哪些类型
普通索引 --加速查找 没有任何限制
主键索引 --加速查找+不能为空+不能重复 一般建表同时完成创建 一个表只能有一个主键 不允许控制
唯一索引 --加速查找+不能重复 索引列的值必须唯一 允许空 一个表可以有多个唯一索引
组合索引 --多列组成一个索引 联合主键索引 联合唯一索引 联合普通索引 列和值组合必须唯一 是指多个字段上创建的索引

主键索引和唯一索引的区别
主键列在创建时,已经默认为空值 + 唯一索引了。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
“mysql主键不需要建立索引,主键具备索引的功能;当创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加"
主键、外键和索引的区别‘

什么是联合索引?
联合索引,是由一个表内的多个字段组成的索引,联合索引遵循最左原则,联合索引适用于多条件查询。

联合索引的优点
减少开销,因为每多一个索引,都会增加磁盘空间的开销可能会覆盖索引,直接通过遍历索引取得数据,无需回表,mysql索引每次只能用一个索引 联合索引可以避免回表

索引列多,通过联合索引筛选出的数据越少.比如有1000w条数据的表,有如下sql:
select col1,col2,col3 from table where col1=1 and col2=2 and col3=3;
假设:假设每个条件可以筛选出10%的数据
A:如果只有单列索引,那么通过该索引能筛选出1000w10%=100w条数据,然后再回表从100w调数据中找到符合col2=2 and col3=3的数据,然后再排序,再分页,以此类推(递归);
B:如果是(col1,col2,col3)联合索引,通过三列索引筛选出1000w
10%*10%*10%=1w,效率提升可想而知!

联合索引的注意事项

  • 索引列不能为null 特别是联合索引 会直接失效

  • 最常用的限制条件放左边 满足最左匹配原则

  • 小心有一个联合索引 里面包含了单个索引导致使用了单个索引 可以调整索引顺序来避免

  • mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order
    by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引

  • 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like
    “aaa%”可以使用索引。

  • 不要在列上进行运算 select * from users where YEAR(adddate)

  • 不使用NOT IN和操作 NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT
    EXISTS代替,id3则可使用id>3 or id

通俗易懂
结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知 道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索或仅对前几列执行搜索时,复合索引非常有用;仅对后面的任意列执行搜索时,复合索引则没有用处。

什么是最左匹配
对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

什么是回表

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/502765
推荐阅读
相关标签
  

闽ICP备14008679号