1、最左前綴匹配原則,聯(lián)合索引,MySQL會(huì)從做向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調(diào)整。
?
2、=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優(yōu)化器會(huì)幫你優(yōu)化成索引可以識(shí)別的形式
?
3、索引列不能參與計(jì)算,保持列“干凈”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是數(shù)據(jù)表中的字段值,但進(jìn)行檢索時(shí),需要把所有元素都應(yīng)用函數(shù)才能比較,顯然成本太大。所以語句應(yīng)該寫成create_time = unix_timestamp(’2014-05-29’)
?
4、使用索引時(shí),索引字段最好小而且唯一,避免select * 的情況
?
5、盡量的擴(kuò)展索引,不要新建索引。比如表中已經(jīng)有a的索引,現(xiàn)在要加(a,b)的索引,那么只需要修改原來的索引即可,建立不必要索引會(huì)增加MySQL空間
?
6、如果確定有多少條數(shù)據(jù),使用 limit 限制一下,MySQL在查找到對(duì)應(yīng)條數(shù)的數(shù)據(jù)的時(shí)候,會(huì)停止繼續(xù)查找
?
7、利用查詢緩存,很多時(shí)候MySQL會(huì)對(duì)查詢結(jié)果進(jìn)行cache,但是對(duì)應(yīng)“動(dòng)態(tài)”的數(shù)據(jù)會(huì)不cache,
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比西秀網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式西秀網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋西秀地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
例如:
1、SELECT username FROM user WHERE signup_date >= CURDATE() 無法使用cache
2、SELECT username FROM user WHERE signup_date >= '2017-05-06' 可以cache
當(dāng)使用了MySQL的一寫函數(shù)之后,MySQL無法確定結(jié)果是易變的,所以不會(huì)cache,還有now(),rand()也一樣不開啟cache
8、join 語法,盡量將小的表放在前面,在需要on的字段上,數(shù)據(jù)類型保持一致,并設(shè)置對(duì)應(yīng)的索引,否則MySQL無法使用索引來join查詢
?
9、在大表上做大量更新時(shí),如果會(huì)鎖全表,則需要拆分執(zhí)行,避免長時(shí)間鎖住表,導(dǎo)致其他請(qǐng)求積累太多(InnoDB 支持行鎖,但前提是Where子句需要建立索引,沒有索引也一樣是鎖全表)
?
while (1) {
//每次只做1000條
mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");
if (mysql_affected_rows() == 0) {
// 沒得可刪了,退出!
break;
}
// 每次都要休息一會(huì)兒
usleep(50000);
}
網(wǎng)站欄目:MySQL--索引優(yōu)化原則
網(wǎng)頁地址:http://www.chinadenli.net/article36/peicsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、響應(yīng)式網(wǎng)站、定制開發(fā)、品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)