1、索引是什么?
在mysql当中, 内部系统它有两种查询方式, 一种是(全盘扫描查询),另外一种是通过(索引检索查询),通过添加了索引的字段进行查询, 可以大大提高查询效率
mysql中的索引相当于一本书中的目录, 通过索引查询数据类似于与通过书的目录查找内容,查询速度可以大大增加。
MySQL中的索引是添加在字段当中的, 一个字段只能添加一个索引,或者多个字段添加同一个索引。
索引是以对象的形式体现在mysql中的, 是以树的结构也就(二叉树),它遵循这左小右大的规则进行排序
2. 索引的检索原理:
假如现在有这样一张表,我想查询id = 101这一行数据, 在没有添加索引的情况下, 系统是一行一行往下对比查询的,需要对比5次才能得出结果,如果数据量大,查询速度会非常的慢
假如id字段添加了索引,如下图,它的查询逻辑是这样的:
拿101和100对比一次, 比100大, 走右边, 再拿101和102对比一次, 比102小,走左边,然后再取101的内存地址,再将sql语句转换成直接通过内存地址查询,这样查询速度会快很多。
可以查看出使用了索引只需2步就可以可以查出数据,在数据量大的情况下,速度会质数性提高。
3. 怎么创建索引?删除索引?查询索引?
在mysql中,主键和unique(约束)字段上系统会自动添加索引
索引不是随意添加的, 如果索引过多,有可能会拖垮系统性能。 那什么情况下适合添加索引?
条件1:查询数据量庞大
条件2:经常放在where后面的字段
条件3:该字段很少被(增删改)操作
创建索引:在mysql中, 主键字段和
# CREATE INDEX 索引别名 on 表名(字段名);
CREATE INDEX id_index on tableName(id);
删除索引
# DROP INDEX 索引别名 on 表名;
DROP INDEX id_index on tableName;
查看索引
# explain 查询语句
EXPLAIN SELECT * from testdb.tableName WHERE NAME = '杰克'
未添加索引的情况下
添加了索引的情况下
索引也会有失效的时候?在什么情况下会失效?
答:在使用了模糊查询,并且%放在前面的时候, 如select * from table where name = "%三";