1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Mysql唯一索引 主键索引 联合索引

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

时间:2023-02-07 04:11:59

相关推荐

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)联合索引,通过三列索引筛选出1000w10%*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进行查找 .当最左侧字段是常量引用时,索引就十分有效。

什么是回表

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。