欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql開啟慢查詢(EXPLAIN SQL語句使用介紹)

 更新時(shí)間:2018年01月25日 19:33:44   投稿:mdxy-dxy  
這篇文章主要介紹了mysql開啟慢查詢 EXPLAIN SQL語句,需要的朋友可以參考下

今天,數(shù)據(jù)庫的操作越來越成為整個(gè)應(yīng)用的性能瓶頸了,這點(diǎn)對于Web應(yīng)用尤其明顯。關(guān)于數(shù)據(jù)庫的性能,這并不只是DBA才需要擔(dān)心的事,而這更是我們程序員需要去關(guān)注的事情。當(dāng)我們?nèi)ピO(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu),對操作數(shù)據(jù)庫時(shí)(尤其是查表時(shí)的SQL語句),我們都需要注意數(shù)據(jù)操作的性能。

1、開啟慢查詢

1> 查看慢查詢是否開啟

show variables like "%quer%";
slow_query_log = ON #已開啟

2> 開啟方法:my.cnf目錄配置

slow_query_log=on #是否開啟
slow_query_log_file=/opt/MySQL_Data/TEST1-slow.log #慢查詢文件位置
long_query_time=2 #查詢超過多少秒才記錄

2、EXPLAIN慢查詢?nèi)罩纠锍霈F(xiàn)的SELECT查詢

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE user NULL ref user user 768 const 1 100.00 NULL

explain列的解釋

  • table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的

  • type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、index、all

  • possible_keys:顯示可能應(yīng)用在這張表中的索引。如果為空,沒有可能的索引。可以為相關(guān)的域從where語句中選擇一個(gè)合適的語句

  • key: 實(shí)際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優(yōu)化不足的索引。這種情況下,可以在select語句中使用use index(indexname)來強(qiáng)制使用一個(gè)索引或者用ignore index(indexname)來強(qiáng)制mysql忽略索引

  • key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好

  • ref:顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù)

  • rows:mysql認(rèn)為必須檢查的用來返回請求數(shù)據(jù)的行數(shù)

  • extra:關(guān)于mysql如何解析查詢的額外信息。例子:using temporary和using filesort,意思mysql根本不能使用索引,結(jié)果是檢索會很慢

key_len的計(jì)算

  1. 所有的索引字段,如果沒有設(shè)置not null,則需要加一個(gè)字節(jié)。

  2. 定長字段,int占四個(gè)字節(jié)、date占三個(gè)字節(jié)、char(n)占n個(gè)字符。

  3. 對于變成字段varchar(n),則有n個(gè)字符+兩個(gè)字節(jié)。

  4. 不同的字符集,一個(gè)字符占用的字節(jié)數(shù)不同。latin1編碼的,一個(gè)字符占用一個(gè)字節(jié),gbk編碼的,一個(gè)字符占用兩個(gè)字節(jié),utf8編碼的,一個(gè)字符占用三個(gè)字節(jié)。

3、建索引的幾大原則

  • 最左前綴匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調(diào)整。

  • =和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優(yōu)化器會幫你優(yōu)化成索引可以識別的形式。

  • 盡量選擇區(qū)分度高的列作為索引,區(qū)分度的公式是count(distinct column)/count(*),表示字段不重復(fù)的比例,比例越大我們掃描的記錄數(shù)越少,唯一鍵的區(qū)分度是1,而一些狀態(tài)、性別字段可能在大數(shù)據(jù)面前區(qū)分度就是0,那可能有人會問,這個(gè)比例有什么經(jīng)驗(yàn)值嗎?使用場景不同,這個(gè)值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃描10條記錄。

  • 索引列不能參與計(jì)算和函數(shù)的使用,保持列干凈。

  • 盡量的擴(kuò)展索引,不要新建索引。比如表中已經(jīng)有a的索引,現(xiàn)在要加(a,b)的索引,那么只需要修改原來的索引即可。

相關(guān)文章

  • mysql默認(rèn)編碼為UTF-8 通過修改my.ini實(shí)現(xiàn)方法

    mysql默認(rèn)編碼為UTF-8 通過修改my.ini實(shí)現(xiàn)方法

    這篇文章主要介紹了mysql默認(rèn)編碼為UTF-8 通過修改my.ini實(shí)現(xiàn)方法的相關(guān)資料,為了防止出現(xiàn)亂碼,Latin1是不支持漢字的,所以要將其改為UTF-8或GBK,需要的朋友可以參考下
    2017-01-01
  • Mysql?Innodb存儲引擎之索引與算法

    Mysql?Innodb存儲引擎之索引與算法

    索引對數(shù)據(jù)庫有多重要,我想大家都已經(jīng)知道了吧,下面這篇文章主要給大家介紹了關(guān)于Mysql?Innodb存儲引擎之索引與算法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 2022最新版MySQL 8.0.30 安裝及配置教程(小白入門)

    2022最新版MySQL 8.0.30 安裝及配置教程(小白入門)

    這篇文章主要介紹了2022最新版MySQL 8.0.30 安裝及配置教程,安裝過程算是比較簡單的,今天給大家分享的此文比較適合mysql數(shù)據(jù)庫的小白,需要的朋友可以參考下
    2022-09-09
  • mysql安裝圖解總結(jié)

    mysql安裝圖解總結(jié)

    本篇文章給大家總結(jié)了在各種電腦環(huán)境系統(tǒng)下安裝MYSQL的圖解過程,以及遇到問題后的解決辦法。
    2018-06-06
  • mysql遞歸查詢所有子集的實(shí)現(xiàn)方法

    mysql遞歸查詢所有子集的實(shí)現(xiàn)方法

    本文主要介紹了mysql遞歸查詢所有子集的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • MySQL導(dǎo)入導(dǎo)出.sql文件及常用命令小結(jié)

    MySQL導(dǎo)入導(dǎo)出.sql文件及常用命令小結(jié)

    在MySQL Qurey Brower中直接導(dǎo)入*.sql腳本,是不能一次執(zhí)行多條sql命令的,下面為大家介紹下MySQL導(dǎo)入導(dǎo)出.sql文件及常用命令
    2014-08-08
  • 淺談MySQL模糊查詢中通配符的轉(zhuǎn)義

    淺談MySQL模糊查詢中通配符的轉(zhuǎn)義

    下面小編就為大家?guī)硪黄獪\談MySQL模糊查詢中通配符的轉(zhuǎn)義。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • mysql中如何設(shè)置大小寫不敏感

    mysql中如何設(shè)置大小寫不敏感

    這篇文章主要介紹了mysql中如何設(shè)置大小寫不敏感問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • docker 部署mysql詳細(xì)過程(docker部署常見應(yīng)用)

    docker 部署mysql詳細(xì)過程(docker部署常見應(yīng)用)

    這篇文章主要介紹了docker 部署mysql之docker部署常見應(yīng)用,本文以docker部署mysql5.7.26為例,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 解決mysql登錄錯誤:''Access denied for user ''root''@''localhost''

    解決mysql登錄錯誤:''Access denied for user ''root''@''localhost''

    這篇文章主要介紹了mysql登錄錯誤:'Access denied for user 'root'@'localhost',本文給出了操作過程及注意事項(xiàng),需要的朋友可以參考下
    2019-11-11

最新評論