MySql如何查看索引并實(shí)現(xiàn)優(yōu)化
mysql中支持hash和btree索引。innodb和myisam只支持btree索引,而memory和heap存儲(chǔ)引擎可以支持hash和btree索引
我們可以通過(guò)下面語(yǔ)句查詢(xún)當(dāng)前索引使用情況:
show status like '%Handler_read%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Handler_read_first | 0 | | Handler_read_key | 0 | | Handler_read_last | 0 | | Handler_read_next | 0 | | Handler_read_prev | 0 | | Handler_read_rnd | 0 | | Handler_read_rnd_next | 0 | +-----------------------+-------+
如果索引正在工作,則Handler_read_key的值會(huì)很高,這個(gè)值代表一個(gè)行被索引值讀的次數(shù),很低值表名增加索引得到的性能改善不高,因此索引并不經(jīng)常使用
如果Handler_read_rnd_next值很高意味著查詢(xún)運(yùn)行效率很低,應(yīng)該建立索引補(bǔ)救,這個(gè)值含義是在數(shù)據(jù)文件中讀取下一行的請(qǐng)求數(shù)。如果正在進(jìn)行大量表掃描,Handler_read_rnd_next的數(shù)值將會(huì)很高。說(shuō)明索引不正確或者沒(méi)有利用索引。
優(yōu)化:
優(yōu)化insert語(yǔ)句:
1.盡量采用 insert into test values(),(),(),()...
2.如果從不同客戶(hù)插入多行,能通過(guò)使用insert delayed語(yǔ)句得到更高的速度,delayed含義是讓insert語(yǔ)句馬上執(zhí)行,其實(shí)數(shù)據(jù)都被放在內(nèi)存隊(duì)列中個(gè),并沒(méi)有真正寫(xiě)入磁盤(pán),這比每條語(yǔ)句分別插入快的多;low_priority剛好相反,在所有其他用戶(hù)對(duì)表的讀寫(xiě)完后才進(jìn)行插入。
3.將索引文件和數(shù)據(jù)文件分在不同磁盤(pán)上存放(利用建表語(yǔ)句)
4.如果進(jìn)行批量插入,可以增加bulk_insert_buffer_size變量值方法來(lái)提高速度,但是只對(duì)MyISAM表使用
5.當(dāng)從一個(gè)文本文件裝載一個(gè)表時(shí),使用load data file,通常比使用insert快20倍
優(yōu)化group by語(yǔ)句:
默認(rèn)情況下,mysql會(huì)對(duì)所有g(shù)roup by字段進(jìn)行排序,這與order by類(lèi)似。如果查詢(xún)包括group by但用戶(hù)想要避免排序結(jié)果的消耗,則可以指定order by null禁止排序。
優(yōu)化order by語(yǔ)句:
某些情況下,mysql可以使用一個(gè)索引滿(mǎn)足order by字句,因而不需要額外的排序。where條件和order by使用相同的索引,并且order by的順序和索引的順序相同,并且order by的字段都是升序或者降序。

優(yōu)化嵌套查詢(xún):
mysql4.1開(kāi)始支持子查詢(xún),但是某些情況下,子查詢(xún)可以被更有效率的join替代,尤其是join的被動(dòng)表待帶有索引的時(shí)候,原因是mysql不需要再內(nèi)存中創(chuàng)建臨時(shí)表來(lái)完成這個(gè)邏輯上需要兩個(gè)步驟的查詢(xún)工作。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL中Like模糊查詢(xún)速度太慢該如何進(jìn)行優(yōu)化
在業(yè)務(wù)場(chǎng)景中經(jīng)常會(huì)用到like模糊查詢(xún),但是大家都知道,like是用不到索引的,所以當(dāng)數(shù)據(jù)量非常大時(shí),速度會(huì)非常慢,這篇文章主要給大家介紹了關(guān)于MySQL中Like模糊查詢(xún)速度太慢該如何進(jìn)行優(yōu)化的相關(guān)資料,需要的朋友可以參考下2021-12-12
MySQL使用的常見(jiàn)問(wèn)題解決與應(yīng)用技巧匯總
這篇文章主要給大家總結(jié)介紹了我們平時(shí)在使用MySQL遇到的常見(jiàn)問(wèn)題解決與應(yīng)用技巧的相關(guān)資料,包括忘記MySQL的root密碼、如何處理 myisam 存儲(chǔ)引擎的表?yè)p壞、數(shù)據(jù)目錄磁盤(pán)空間不足的問(wèn)題等等問(wèn)題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-11-11
LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別
本文主要介紹了LEFT JOIN關(guān)聯(lián)表中ON,WHERE后面跟條件的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Win10 64位使用壓縮包安裝最新MySQL8.0.18的教程(圖文詳解)
本文通過(guò)圖文并茂的形式給大家介紹了WIN10 64位使用壓縮包安裝最新MySQL8.0.18的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
解決Linux下Tomcat向MySQL插入數(shù)據(jù)中文亂碼問(wèn)題
本文給大家介紹的是如何解決win平臺(tái)下開(kāi)發(fā)的項(xiàng)目移植到Linux平臺(tái)后,向MySQL插入數(shù)據(jù)時(shí)中文出現(xiàn)亂碼的問(wèn)題,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下2018-04-04
MySQL存儲(chǔ)引擎簡(jiǎn)介及MyISAM和InnoDB的區(qū)別
這篇文章主要介紹了MySQL存儲(chǔ)引擎簡(jiǎn)介及MyISAM和InnoDB的區(qū)別,重點(diǎn)介紹了MyISAM 和 InnoDB的區(qū)別,需要的朋友可以參考下2014-05-05
MySQL數(shù)據(jù)庫(kù)命名規(guī)范及約定
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)的操作規(guī)范及、表名約定、列名約定,需要的朋友可以參考下2014-03-03
MySQL隨機(jī)查詢(xún)記錄的效率測(cè)試分析
以下的文章主要介紹的是MySQL使用rand 隨機(jī)查詢(xún)記錄效率測(cè)試,我們大家一直都以為MySQL數(shù)據(jù)庫(kù)隨機(jī)查詢(xún)的幾條數(shù)據(jù),就用以下的東東,其實(shí)其實(shí)際效率是十分低的2011-06-06

