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)在经常需要排序的列上。