mysql 从库 速度太慢_mysql查询速度慢的原因[整理版]
在以前的博客中陸續(xù)記錄了有關(guān)查詢(xún)效率方面的文章。今天在整理一下,寫(xiě)上自己的一些心得記錄如下:
常見(jiàn)查詢(xún)慢的原因常見(jiàn)的話(huà)會(huì)有如下幾種:
1、沒(méi)有索引或沒(méi)有用到索引。
PS:索引用來(lái)快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹(shù)的形式保存。如果沒(méi)有索引,執(zhí)行查詢(xún)時(shí)MySQL必須從第一個(gè)記錄開(kāi)始掃描整個(gè)表 的所有記錄,直至找到符合要求的記錄。表里面的記錄數(shù)量越多,這個(gè)操作的代價(jià)就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引,MySQL無(wú)需掃描任何記錄 即可迅速得到目標(biāo)記錄所在的位置。如果表有1000個(gè)記錄,通過(guò)索引查找記錄至少要比順序掃描記錄快100倍。
索引類(lèi)型:
普通索引:這是最基本的索引類(lèi)型,沒(méi)唯一性之類(lèi)的限制。
唯一性索引:和普通索引基本相同,但所有的索引列只能出現(xiàn)一次,保持唯一性。
主鍵:主鍵是一種唯一索引,但必須指定為"PRIMARY KEY"。
全文索引:MYSQL從3.23.23開(kāi)始支持全文索引和全文檢索。在MYSQL中,全文索引的索引類(lèi)型為FULLTEXT。全文索引可以在VARCHAR或者TEXT類(lèi)型的列上創(chuàng)建。
2、IO吞吐量小形成了瓶頸。
PS:這是從系統(tǒng)層來(lái)分析MYSQL是比較耗IO的。一般數(shù)據(jù)庫(kù)監(jiān)控也是比較關(guān)注IO。
監(jiān)控命令:$iostat -d -k 1 10
參數(shù) -d 表示,顯示設(shè)備(磁盤(pán))使用狀態(tài);-k某些使用block為單位的列強(qiáng)制使用Kilobytes為單位;1 10表示,數(shù)據(jù)顯示每隔1秒刷新一次,共顯示10次。
3、內(nèi)存不足
監(jiān)控內(nèi)存使用:vmstat [-n] [延時(shí)[次數(shù)]]
Memory
swpd: 切換到交換內(nèi)存上的內(nèi)存(默認(rèn)以KB為單位)
? 如果 swpd 的值不為0,或者還比較大,比如超過(guò)100M了,但是si, so 的值長(zhǎng)期為0,這種情況我們可以不用擔(dān)心,不會(huì)影響系統(tǒng)性能。
free: 空閑的物理內(nèi)存
buff: 作為buffer cache的內(nèi)存,對(duì)塊設(shè)備的讀寫(xiě)進(jìn)行緩沖
cache: 作為page cache的內(nèi)存, 文件系統(tǒng)的cache? 如果 cache 的值大的時(shí)候,說(shuō)明cache住的文件數(shù)多,如果頻繁訪問(wèn)到的文件都能被cache住,那么磁盤(pán)的讀IO bi 會(huì)非常小。
4、網(wǎng)絡(luò)速度慢
ping IP -t 查看是否有丟包。
5、一次查詢(xún)的數(shù)據(jù)量過(guò)大。
比如沒(méi)有分頁(yè)查詢(xún),一次提取上萬(wàn)條記錄。數(shù)據(jù)庫(kù)有可能卡死。
6、出現(xiàn)死鎖
所謂死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去.
Show innodb status檢查引擎狀態(tài) ,可以看到哪些語(yǔ)句產(chǎn)生死鎖。
執(zhí)行show? processlist找到死鎖線(xiàn)程號(hào).然后Kill processNo
7、返回了不必要的行或列
一般查詢(xún)SQL語(yǔ)句一定要將字段明確指定。而不要使用*進(jìn)行查詢(xún)
8、注意UNion和UNion all 的區(qū)別。UNION all好
UNION在進(jìn)行表鏈接后會(huì)篩選掉重復(fù)的記錄,所以在表鏈接后會(huì)對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果。所以u(píng)nion all的效率肯定要高!
9、
總結(jié)
以上是生活随笔為你收集整理的mysql 从库 速度太慢_mysql查询速度慢的原因[整理版]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android刷新时的圆形动画_【And
- 下一篇: mysql语录错误1300_mysql