关于数据库索引

I:mysql数据库索引类型

(1)   唯一索引:不允许表中任意两行具有相同值的索引。

(2)   非唯一索引:允许其中任何两行具有相同索引值的索引。

(3)   主键索引:数据库表中有一列或列组合,其值唯一标识表中的每一行。

(4)   聚集索引: 表中记录的物理顺序与索引的顺序一致。一张表只能有一个聚集索引。

(5)  非聚集索引:表中记录的物理顺序和索引的顺序不一致。

II:唯一索引和主键索引的区别:一个表中只能有一个主键索引,而一个表中可以有多个唯一索引;主键可以被其他表引用为外键,而唯一索引不能。

III:索引实现原理:B+

IV:建立索引的优缺点:优点是可以加快数据的检索速度;缺点是创建索引需要浪费时间和空间,并且更新数据时需要同时更新索引,从而导致数据库更新数据的性能下降。

V:非聚集索引和聚集索引的区别:

聚集索引   非聚集索引
B+树实现 B+树实现
叶子节点存储真实的数据  叶子节点存储指向真实数据的指针
表中记录的物理顺序与索引的顺序一致 非聚集索引:表中记录的物理顺序和索引的顺序不一致。

VI:会使索引失效的情况

(1)条件中有or,即使其中有条件带索引页不会使用(要想既使用or,又想让索引失效,只能将or条件中每个列都加上索引)。解决方法:通过UNION连接多条select语句。

(2)like查询并且以%开头。解决方法:使用FULLTEXT(全文本搜索)代替like。

(3)若列类型为字符串,则一定要在条件中将数据用引号引起来,否则不使用索引。

(4)若mysql估计使用全表扫描比索引快,则不使用索引。

(5)对索引列进行运算导致索引列失效。

VII:应该在那些列上加索引?

(1)经常用于搜索的列,加快搜索速度。

(2)作为主键的列,强制该列的唯一性。

(3)在经常用在连接的列上,这些列主要是外键,可以加快连接速度。

(4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,指定的范围是连续的。

(5)在经常需要排序的列上。


猜你喜欢

转载自blog.csdn.net/g1607058603/article/details/80641824