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

MySQL慢SQL語句常見誘因以及解決方法

 更新時(shí)間:2019年08月29日 15:22:45   作者:哈天奇不奇  
在本篇文章里小編給大家整理的關(guān)于MySQL慢SQL語句常見誘因以及解決方法,有需要的朋友們可以學(xué)習(xí)下。

1. 無索引、索引失效導(dǎo)致慢查詢

如果在一張幾千萬數(shù)據(jù)的表中以一個(gè)沒有索引的列作為查詢條件,大部分情況下查詢會(huì)非常耗時(shí),這種查詢毫無疑問是一個(gè)慢SQL查詢。所以對(duì)于大數(shù)據(jù)量的查詢,需要建立適合的索引來優(yōu)化查詢。

雖然很多時(shí)候建立了索引,但在一些特定的場景下,索引還有可能會(huì)失效,所以索引失效也是導(dǎo)致慢查詢的主要原因之一。

2. 鎖等待

常用的存儲(chǔ)引擎有 InnoDB 和 MyISAM,前者支持行鎖和表鎖,后者只支持表鎖。

如果數(shù)據(jù)庫操作是基于表鎖實(shí)現(xiàn)的,試想下,如果一張訂單表在更新時(shí),需要鎖住整張表,那么其它大量數(shù)據(jù)庫操作(包括查詢)都將處于等待狀態(tài),這將嚴(yán)重影響到系統(tǒng)的并發(fā)性能。

這時(shí),InnoDB 存儲(chǔ)引擎支持的行鎖更適合高并發(fā)場景。但在使用 InnoDB 存儲(chǔ)引擎時(shí),要特別注意行鎖升級(jí)為表鎖的可能。在批量更新操作時(shí),行鎖就很可能會(huì)升級(jí)為表鎖。

MySQL認(rèn)為如果對(duì)一張表使用大量行鎖,會(huì)導(dǎo)致事務(wù)執(zhí)行效率下降,從而可能造成其它事務(wù)長時(shí)間鎖等待和更多的鎖沖突問題發(fā)生,致使性能嚴(yán)重下降,所以MySQL會(huì)將行鎖升級(jí)為表鎖。還有,行鎖是基于索引加的鎖,如果在更新操作時(shí),條件索引失效,那么行鎖也會(huì)升級(jí)為表鎖。

因此,基于表鎖的數(shù)據(jù)庫操作,會(huì)導(dǎo)致SQL阻塞等待,從而影響執(zhí)行速度。在一些更新操作(insert\update\delete)大于或等于讀操作的情況下,MySQL不建議使用MyISAM存儲(chǔ)引擎。

除了鎖升級(jí)之外,行鎖相對(duì)表鎖來說,雖然粒度更細(xì),并發(fā)能力提升了,但也帶來了新的問題,那就是死鎖。因此,在使用行鎖時(shí),要注意避免死鎖。

3. 不恰當(dāng)?shù)腟QL語句

使用不恰當(dāng)?shù)腟QL語句也是慢SQL最常見的誘因之一。例如,習(xí)慣使用<SELECT *>,<SELECT COUNT(*)> SQL語句,在大數(shù)據(jù)表中使用<LIMIT M,N>分頁查詢,以及對(duì)非索引字段進(jìn)行排序等等。

以上就是本次介紹的全部知識(shí)點(diǎn)內(nèi)容,感謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • MySQL自動(dòng)停機(jī)的問題處理實(shí)戰(zhàn)記錄

    MySQL自動(dòng)停機(jī)的問題處理實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于MySQL自動(dòng)停機(jī)的問題處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • MySQL筆記之別名的使用

    MySQL筆記之別名的使用

    在查詢時(shí),可以為表和字段取一個(gè)別名。這個(gè)別名可以代替其指定的表和字段
    2013-05-05
  • 批量替換 MySQL 指定字段中的字符串

    批量替換 MySQL 指定字段中的字符串

    批量替換 MySQL 指定字段中的字符串是數(shù)據(jù)庫應(yīng)用中很常見的需求,但是有很多初學(xué)者在遇到這種需求時(shí),通常都是用腳本來實(shí)現(xiàn);其實(shí),MySQL 內(nèi)置的有批量替換語法,效率也會(huì)高很多;想了解具體方法,繼續(xù)閱讀本文吧 :)
    2009-09-09
  • Centos7中MySQL數(shù)據(jù)庫使用mysqldump進(jìn)行每日自動(dòng)備份的編寫

    Centos7中MySQL數(shù)據(jù)庫使用mysqldump進(jìn)行每日自動(dòng)備份的編寫

    數(shù)據(jù)庫的備份,對(duì)于生產(chǎn)環(huán)境來說尤為重要,數(shù)據(jù)庫的備份分為物理備份和邏輯備份。我們將使用mysqldump命令進(jìn)行數(shù)據(jù)備份。使用自動(dòng)任務(wù)進(jìn)行每日備份,下邊我們將使用mysqldump命令進(jìn)行數(shù)據(jù)備份,感興趣的朋友一起看看吧
    2021-07-07
  • Windows服務(wù)器MySQL中文亂碼的解決方法

    Windows服務(wù)器MySQL中文亂碼的解決方法

    這篇文章主要介紹了MySQL中文亂碼的一些解決方案,本文同時(shí)分解了MySQL中文亂碼的原因分析,需要的朋友可以參考下
    2015-01-01
  • mysql?count()函數(shù)不計(jì)算null和空值問題

    mysql?count()函數(shù)不計(jì)算null和空值問題

    這篇文章主要介紹了mysql?count()函數(shù)不計(jì)算null和空值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL中查看數(shù)據(jù)庫安裝路徑的方法

    MySQL中查看數(shù)據(jù)庫安裝路徑的方法

    有時(shí)候在我們開發(fā)的過程中并不一定記得數(shù)據(jù)庫的安裝路徑,比如要查看mysql 數(shù)據(jù)庫的安裝目錄在哪里,這里就為大家分享一下
    2021-03-03
  • Linux環(huán)境mysql5.7.12安裝教程

    Linux環(huán)境mysql5.7.12安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux環(huán)境Mysql5.7.12安裝教程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mysql+shardingSphere的分庫分表實(shí)現(xiàn)示例

    mysql+shardingSphere的分庫分表實(shí)現(xiàn)示例

    分庫分表是一種場景解決方案,它的出現(xiàn)是為了解決一些場景問題的,本文主要介紹了mysql+shardingSphere的分庫分表實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以
    2024-04-04
  • insert...on?duplicate?key?update語法詳解

    insert...on?duplicate?key?update語法詳解

    本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論