1:盡量使用緩存
mysql一般會(huì)開(kāi)啟緩存機(jī)制纠俭,當(dāng)有很多相同的查詢被執(zhí)行了多次的時(shí)候雳锋,這些查詢結(jié)果會(huì)被放到一個(gè)緩存中颂砸,這樣,后續(xù)的相同的查詢就不用操作表而直接訪問(wèn)緩存結(jié)果了谣沸。
這里要注意的幾點(diǎn)就是盡量避免使用NOW() 和 RAND() 這樣的函數(shù)刷钢,這會(huì)讓緩存機(jī)制無(wú)效
2:查看執(zhí)行效率來(lái)幫助自己改善sql寫(xiě)法
用EXPLAIN來(lái)查詢你SQL的執(zhí)行效率
3:利用好索引
把你常用的查詢字段設(shè)置到索引中去,這會(huì)極大的提高你的Sql查詢速度乳附,另外需要考慮以下幾種情況可能使得索引無(wú)效
(1)如果條件中有or内地,即使其中有條件帶索引也不會(huì)使用(這也是為什么盡量少用or的原因)
要想使用or,又想讓索引生效赋除,只能將or條件中的每個(gè)列都加上索引
(2)對(duì)于多列索引阱缓,不是使用的第一部分,則不會(huì)使用索引
(3)like查詢以%開(kāi)頭
(4)如果列類(lèi)型是字符串举农,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來(lái),否則不使用索引
(5)如果mysql估計(jì)使用全表掃描要比使用索引快,則不使用索引
4:限定合理的搜索范圍
如果你只想查詢一條數(shù)據(jù)的話荆针,你可以加上limit 1,如果是翻頁(yè)的話颁糟,可以優(yōu)先過(guò)濾行數(shù)之類(lèi)的范圍值航背,讓sql檢索范文保持在一個(gè)可控的范圍內(nèi),而不是全表檢索棱貌。
5:避免使用select *
從數(shù)據(jù)庫(kù)里讀出越多的數(shù)據(jù)玖媚,那么查詢就會(huì)變得越慢。并且婚脱,如果你的數(shù)據(jù)庫(kù)服務(wù)器和WEB服務(wù)器是兩臺(tái)獨(dú)立的服務(wù)器的話今魔,這還會(huì)增加網(wǎng)絡(luò)傳輸?shù)呢?fù)載。