索引是一种数据结构
MYSQL官方对索引的定义为:索引(Index)是帮助mysql高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。
索引的目的在于提高查询效率,可以类比字典。
如果要查询“mysql"这个单词,我们肯定需要定位到m字母,然后从下往上找到y字母,再找到剩下的sql。
如果没有索引,那么您可能需要a---z,如果我想找到Java开头的单词。
B树索引:
数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。
表删数据-》》索引要重建
一般来说索引本身也很大,不可能全部存储再内存中,因此索引往往一索引文件的形式存储再磁盘上。
我们平常所说的索引,如果没有特别的指明,都是指B树(多路搜索树,并不一定是二叉树的)结构组织的索引。其中聚集索引,次要索引 复合索引,前缀索引,唯一索引默认都是B+树索引。当然,除了B+树索引之外,还有哈希索引(hash index).
索引的优劣势
优势:
1、提高数据检索的效率,降低数据库的IO成本
2、降低数据排序的成本,降低了CPU的消耗
劣势:
索引知识提高效率的一个因素,如果您的mysql有大数据量的表,就需要花费时间研究建立最优秀的索引,或优化查询语句
索引结构与检索原理
mysql索引结构:BTree索引、Hash索引、full-text全文索引、R-Tree索引
哪些情况需要创建索引:
1.主键自动建立唯一索引
2.频繁作为查询条件的字段应该创建索引
3.查询中与其他表关联的字段,外键关系建立索引
4.频繁更新的字段不适合创建索引,因为每次更新不单单是更新记录还会更新索引
5.where条件里用不到的字段不创建索引
6.单键/组合索引的选择文件,who?(再高并发下倾向创建组合索引)
7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
8.查询中统计或者分组字段
哪些情况不适合建索引:
1.表记录太少
2.经常增删改的表:提高了表的查询速度,同时却会降低更新表的速度,如对表进行INSERT\UPDATE时不仅更新数据,同时还需要保存索引文件
3.如果某个数据列包含许多重复的内容,为它创建索引就没有太大的实际效果,索引选择性越接近1,索引的效率就会越高(比如一张表中有2000条数据,某索引列不同值的数目达到1980,索引选择性就是1980/2000=0.99~1)