1.SQL關(guān)鍵字的執(zhí)行的順序
from======》where======》group by======》having======》select======》order by
2.避免全表掃描扁位,將where條件和order by條件后用到的字段建立索引。
開(kāi)發(fā)初期祟滴,表少,索引創(chuàng)建與否礁竞,可能對(duì)性能沒(méi)啥影響恢氯;但是到表記錄多的時(shí)候,缺少索引阱州,可能對(duì)性能的影響會(huì)越來(lái)越大挑秉。
建立索引的注意點(diǎn)
1)大量重復(fù)數(shù)據(jù)不要建索引
當(dāng)索引列有大量重復(fù)數(shù)據(jù)時(shí),這時(shí)索引并沒(méi)有提高查詢效率贡耽。
比如:性別sex衷模,男和女各占一半,建索引沒(méi)起到作用蒲赂。
2)索引不是越多越好阱冶,增改會(huì)變慢
一個(gè)表的索引最好不要超過(guò)6個(gè)。索引雖然提高了select的速度滥嘴,但是insert和update的速度會(huì)變慢木蹬。
3)避免對(duì)索引進(jìn)行一下操作
避免對(duì)索引字段進(jìn)行計(jì)算操作
避免在索引字段上使用in、<>若皱、镊叁!=
避免在索引列上使用is null、is not null? ??
避免在索引列上使用函數(shù)
避免在索引列上出現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換
避免建立索引的列中使用空值
總結(jié):索引分為:主鍵索引走触、普通索引晦譬、唯一索引、文本索引
3.where
1)避免在where后使用in互广、<>敛腌、!=、null惫皱、in像樊、or、函數(shù)旅敷、表達(dá)式操作
2)exists替代in
3)like也會(huì)全表掃描
4.explain解釋及個(gè)字段含義
explain顯示MySQL如何使用索引來(lái)處理select語(yǔ)句以及連接表生棍。可以幫助選擇更好的索引和寫出更優(yōu)化的查詢語(yǔ)句媳谁。
1)id:id是一組數(shù)字涂滴,表示查詢的執(zhí)行順序
2)select_type:查詢類型
SIMPLE簡(jiǎn)單表:不使用子查詢或連接
PRIMARY主查詢:外層的查詢
UNION:第二個(gè)或后面的查詢語(yǔ)句
SUBQUERY:子查詢中的第一個(gè)select
3)table:輸出結(jié)果的表
總之:possible_keys是可能用到的索引友酱、key_lan和rows的值越小越好