索引介绍
索引可以将MySql的查询语句性能提升,对于中大型的DBMS,索引是必不可少的. 不过建立太多的索引也不好,频繁的插入和更新会有大量的I/O操作,索引文件中的索引也要随之改动,必然更加消耗资源影响DBMS性能. 索引是存储引擎层面的,存储引擎最常见的有InnoDB和MyISAM,用的索引都是B-Tree,而InnoDB用的索引是变种的B+Tree. 当然还有其他索引,比如hash索引,而hash索引只支持精确查找(=、<=>、IN). 所以基本上用的是B-Tree索引.
索引是以特殊文件的形式顺序存储, 像主键就是一种索引,不过像这种索引在文件中的位置和数据库中的位置一样. where子句中使用了索引的话,就去索引文件中查找相对应的记录,没有用索引的话,速度慢了好多倍. 比如log2(1000)和1000的区别.
索引命令
先来看一下索引命令行语法:
索引操作的话,只有增和删,没有修改.
索引的话,有单列和多列索引. 像PRIMARY KEY和UNIQUE KEY默认的就是单列索引也是唯一索引.
在where子句中,如果用了多个单列索引的话,会单独使用索引,并将结果合并. 所以此时最好的方式就是使用多列索引. 如果用到了多列索引最好要遵循前缀索引原则, 选择适合的索引顺序,将索引设计到最优. 比如:
分类
索引也可以分为聚簇索引和非聚簇索引. 像主键就是聚簇索引,如果没有指定主键,那么InnoDB会选择唯一非空索引当做聚簇索引,要是还是没有的话,InnoDB会隐式选择一个当做聚簇索引. 所以说一个使用了InnoDB存储引擎的表中一定有且只有一个聚簇索引.
聚簇索引的话,将数据都存储在了和索引同一个B-Tree上,叶子页保存的是数据记录.
非聚簇索引(也叫二级索引)的话,就像上面列子中一样使用. 非聚簇索引的话,需要二次索引查找. 因为非聚簇索引叶子页保存的不是数据而是主键. 所以先通过索引查找到主键,然后再去聚簇索引中找到对应的数据记录. 而hash索引就减少了这种工作.
这里简单介绍了常用的知识, 关于索引还有很多知识值得思考…