在數據庫中索引對於查找是很是有用的,樓主作了兩個實驗,插入數據的時候很是慢,樓主是這樣實驗的: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是不會走索引的!