因?yàn)樘嗟乃饕c不充分、不正確的索引對性能都毫無益處:
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的安徽網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
在表上建立的每個(gè)索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。
另外,過多的復(fù)合索引,在有單字段索引的情況下,一般都是沒有存在價(jià)值的;
相反,還會降低數(shù)據(jù)增加刪除時(shí)的性能,特別是對頻繁更新的表來說,負(fù)面影響更大
MYSQL索引信息存儲在INFORMATION_SCHEMA.STATISTICS表里,如果要批量刪除索引(主鍵除外)則可通過其構(gòu)建批量刪除sql。下面是我刪除pafss庫中所有以j_打頭的表的索引的sql。批量刪除主鍵可以通過第二個(gè)sql,但是自增列不能通過這種方式刪除。
1、SELECT?DISTINCT?(CONCAT('drop?index?',?INDEX_NAME,?'?on?',?TABLE_NAME,?';'))
FROM?INFORMATION_SCHEMA.STATISTICS?T
WHERE?T.TABLE_SCHEMA?=?'pafss'
AND?T.TABLE_NAME?LIKE?'j_%'
AND?T.INDEX_NAME??'PRIMARY';
2、SELECT??DISTINCT(concat('alert?table?',?TABLE_NAME?,'?drop?primary?key?;')),t.*
FROM?INFORMATION_SCHEMA.STATISTICS?T
WHERE?T.TABLE_SCHEMA?=?'pafss'
AND?T.TABLE_NAME?LIKE?'j_%'
AND?T.INDEX_NAME?=?'PRIMARY'
如果不是用來搜尋的字段加了索引,導(dǎo)致插入,更新速度變慢,因?yàn)橐滤饕?
建立索引常用的規(guī)則如下:
1、表的主鍵、外鍵必須有索引;
2、數(shù)據(jù)量超過300的表應(yīng)該有索引;
3、經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引;
4、經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引;
5、索引應(yīng)該建在選擇性高的字段上;
6、索引應(yīng)該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;
7、復(fù)合索引的建立需要進(jìn)行仔細(xì)分析;盡量考慮用單字段索引代替: A、正確選擇復(fù)合索引中的主列字段,一般是選擇性較好的字段; B、復(fù)合索引的幾個(gè)字段是否經(jīng)常同時(shí)以AND方式出現(xiàn)在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復(fù)合索引;否則考慮單字段索引; C、如果復(fù)合索引中包含的字段經(jīng)常單獨(dú)出現(xiàn)在Where子句中,則分解為多個(gè)單字段索引; D、如果復(fù)合索引所包含的字段超過3個(gè),那么仔細(xì)考慮其必要性,考慮減少復(fù)合的字段; E、如果既有單字段索引,又有這幾個(gè)字段上的復(fù)合索引,一般可以刪除復(fù)合索引;
8、頻繁進(jìn)行數(shù)據(jù)操作的表,不要建立太多的索引;
9、刪除無用的索引,避免對執(zhí)行計(jì)劃造成負(fù)面影響; 以上是一些普遍的建立索引時(shí)的判斷依據(jù)。一言以蔽之,索引的建立必須慎重,對每個(gè)索引的必要性都應(yīng)該經(jīng)過仔細(xì)分析,要有建立的依據(jù)。因?yàn)樘嗟乃饕c不充分、不正確的索引對性能都毫無益處:在表上建立的每個(gè)索引都會增加存儲開銷,索引對于插入、刪除、更新操作也會增加處理上的開銷。另外,過多的復(fù)合索引,在有單字段索引的情況下,一般都是沒有存在價(jià)值的;相反,還會降低數(shù)據(jù)增加刪除時(shí)的性能,特別是對頻繁更新的表來說,負(fù)面影響更大