Mysql慢查詢優(yōu)化方法及優(yōu)化原則
1、日期大小的比較,傳到xml中的日期格式要符合'yyyy-MM-dd',這樣才能走索引,如:'yyyy'改為'yyyy-MM-dd','yyyy-MM'改為'yyyy-MM-dd'【這樣MYSQL會(huì)轉(zhuǎn)換為日期類型】
2、條件語(yǔ)句中無(wú)論是等于、還是大于小于,WHERE左側(cè)的條件查詢字段不要使用函數(shù)或表達(dá)式或數(shù)學(xué)運(yùn)算
3、WHERE條件語(yǔ)句嘗試著調(diào)整字段的順序提升查詢速度,如把索引字段放在最前面、把查詢命中率高的字段置前等
4、保證優(yōu)化SQL前后其查詢結(jié)果是一致的
5、在查詢的時(shí)候通過(guò)將EXPLAIN命令寫(xiě)在查詢語(yǔ)句前,測(cè)試語(yǔ)句是否有走索引【具體用法百度】
6、禁止使用SELECT * FROM操作,應(yīng)只返回需要的字段,不需要的字段不要返回
7、可以嘗試分解復(fù)雜的查詢,在應(yīng)用層面進(jìn)行表關(guān)聯(lián),以此代替SQL層面的表關(guān)聯(lián)
8、WHERE子句和ORDER BY子句涉及到的列建索引
9、避免在WHERE子句中對(duì)字段進(jìn)行NULL判斷【可以對(duì)表字段改造一下,字符串型字段默認(rèn)值設(shè)置為空字符串,數(shù)字型字段默認(rèn)值設(shè)置為0,日期型字段默認(rèn)值設(shè)置為1990-01-01等】
10、避免在WHERE子句中使用!=或<>操作符
11、避免在WHERE子句中使用OR操作符
12、BETWEEN AND代替IN
13、LIKE '%abc%'不會(huì)走索引,而LIKE 'abc%'會(huì)走索引
14、避免對(duì)字段進(jìn)行表達(dá)式操作
15、避免對(duì)字段進(jìn)行函數(shù)操作
16、GROUP BY操作默認(rèn)會(huì)對(duì)GROUP BY后面的字段進(jìn)行排序,如果你的程序不需要排序,可在GROUP BY語(yǔ)句后面加上ORDER BY NULL去除排序
17、如果是數(shù)值型字段,則盡量設(shè)計(jì)為數(shù)值型字段,不要為了方便、為了偷懶而給后面維護(hù)的同事埋坑
18、表中所有字段設(shè)計(jì)為NOT NULL
19、返回條數(shù)固定時(shí),用LIMIT語(yǔ)句限制返回記錄的條數(shù),如只需要一條記錄,或肯定只有一條記錄符合條件,那建議加上LIMIT 1
20、對(duì)于枚舉類型的字段【即有固定羅列值的字段】,建議使用ENUM而不是VARCHAR,如性別、星期、類型、類別等
21、對(duì)于存IP地址的字段設(shè)計(jì)為成UNSIGNED INT型
22、避免在SQL中使用NOW()、CURDATE()、RAND()函數(shù)【因?yàn)檫@種方式會(huì)導(dǎo)致MYSQL無(wú)法使用SQL緩存】,可以轉(zhuǎn)化為通過(guò)傳入?yún)?shù)的方式
23、對(duì)于統(tǒng)計(jì)類的查詢【如查詢連續(xù)幾個(gè)月的數(shù)據(jù)總量,或查詢同比、環(huán)比等】,可以通過(guò)定時(shí)查詢并統(tǒng)計(jì)到統(tǒng)計(jì)表的方式提高查詢速度
總結(jié)
以上所述是小編給大家介紹的Mysql慢查詢優(yōu)化方法及優(yōu)化原則 ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
使用SKIP-GRANT-TABLES 解決 MYSQL ROOT密碼丟失
這篇文章主要介紹了使用SKIP-GRANT-TABLES 解決 MYSQL ROOT密碼丟失的相關(guān)資料,需要的朋友可以參考下2015-09-09
MySQL 8.0數(shù)據(jù)字典緩存管理機(jī)制解析
MySQL 8.0中的數(shù)據(jù)字典,通過(guò)對(duì)兩級(jí)緩存的逐級(jí)訪問(wèn),以及精妙的對(duì)緩存未命中情況的處理方式,有效的加速了在不同場(chǎng)景下數(shù)據(jù)庫(kù)對(duì)DD的訪問(wèn)速度,顯著的提升了數(shù)據(jù)庫(kù)訪問(wèn)元數(shù)據(jù)信息的效率,這篇文章主要介紹了解讀MySQL 8.0數(shù)據(jù)字典緩存管理機(jī)制,需要的朋友可以參考下2024-07-07
mysql.help_topic生成序列的方法實(shí)現(xiàn)
本文探討了如何使用MySQL的help_topic表生成序列,并介紹了相應(yīng)的SQL查詢語(yǔ)句和實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
數(shù)據(jù)庫(kù)設(shè)計(jì)工具M(jìn)ySQL?Workbench使用教程(超級(jí)詳細(xì)!)
MySQL?Workbench為數(shù)據(jù)庫(kù)管理員、程序開(kāi)發(fā)者和系統(tǒng)規(guī)劃師提供可視化的Sql開(kāi)發(fā)、數(shù)據(jù)庫(kù)建模、以及數(shù)據(jù)庫(kù)管理功能,下面這篇文章主要給大家介紹了關(guān)于MySQL設(shè)計(jì)工具Workbench使用的相關(guān)資料,需要的朋友可以參考下2023-02-02
淺談mysql的索引設(shè)計(jì)原則以及常見(jiàn)索引的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談mysql的索引設(shè)計(jì)原則以及常見(jiàn)索引的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
mysql數(shù)據(jù)庫(kù)和oracle數(shù)據(jù)庫(kù)之間互相導(dǎo)入備份
今天小編就為大家分享一篇關(guān)于mysql數(shù)據(jù)庫(kù)和oracle數(shù)據(jù)庫(kù)之間互相導(dǎo)入備份,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
MySQL安裝時(shí)一直卡在starting?server的問(wèn)題及解決方法
這篇文章主要介紹了MySQL安裝時(shí)一直卡在starting?server的問(wèn)題及解決方法,出現(xiàn)這種情況大概有兩個(gè)原因,文中對(duì)每種原因給大家詳細(xì)介紹,需要的朋友可以參考下2022-06-06
超簡(jiǎn)單的qps統(tǒng)計(jì)方法(推薦)
下面小編就為大家?guī)?lái)一篇超簡(jiǎn)單的qps統(tǒng)計(jì)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
linux下改良版本mysqldump來(lái)備份MYSQL數(shù)據(jù)庫(kù)
我的備份腳本都是在凌晨執(zhí)行的,經(jīng)常在慢查詢?nèi)罩纠锩婵吹竭@樣的信息:select * from table1; 之前一直很納悶,最后才了解到原來(lái)是MYSQLDUMP搞的鬼。2008-07-07

