在数据库中索引对于查找是很是有用的,楼主作了两个实验,插入数据的时候很是慢,楼主是这样实验的:mysql
一:数据库列的索引sql
①:首先执行语句insert into test.user (select * from root.user where root.user.id>1 and root.user.id<10000),对于id,在没有建索引的状况下,楼主执行完sql以后等了大概有十秒尚未结束,趁这个时间楼主上了个厕所,回来的时候,惊呆了,sql竟然尚未执行完成,又等了一下子,实在等不下去了,就没有去理sql了;我没有等到sql结束,一分钟以后我终止了sql。数据库
②:楼主对表字段name加了索引,效果十分显著,让楼主大吃一惊,加了索引以后时间是0.56秒(具体时间忘了),什么概念,没有索引的sql对比有索引的sql时间竟然是后者的100倍级别了!优化
③:对于索引,数据库是怎么管理的。咱们都知道数据在硬盘上存储是没有规律的,即使是两条相邻的数据,他的物理地址也不必定是相邻的。因此数据库为加了索引的列维护了一个二叉树,二叉树的每个节点记录了对应的字段数据(id的值)和物理地址,当你在检索有索引的数据的时候,数据库会从二叉树上快速定位到你检索列的值,而后根据对应的值获取对应的地址,从而根据无力地址快速定位到数据。索引
二:模糊查找是否走索引table
①:楼主用了这样一个sql,explain select * from table_name where name like '%李%',这个sql即使是你对name加了索引,他也不会走索引,而是走全表。test
②:楼主换了一种sql,explain select * from table_name where name like '李%',这种sql以后就走了索引。select
③:以后楼主吧百分号换到了前面,explain select * from table_name where name like '%李',这种sql仍是没有走索引二叉树
④:而后楼主又换:explain select * from table_name where id>0 and id <10000 and name like '李%',在mysql5.6版本,这条语句在id没有加索引的状况下仍是走了索引,由于在5.6版本mysql作了优化,他先会走有索引的列,而后去筛选其余的条件,这样会大大减小检索时间。数据
⑤:explain select * from table_name where id>0 and id <10000 and name like '_李%',这条sql是不会走索引的,由于后面的模糊查找条件被下划线做为占位符占据了位置。mysql不会走索引
因此,对于mysql的索引问题:模糊查找,%在前面不走索引,在后面走索引,sql有索引的会先走索引,可是比较重要的一条是,模糊查找的百分号在后面的时候,要查找的数据被其余占位符占取的时候,sql是不会走索引的!