一條sql慢的原因

2021-09-19 09:07:46 字數 1034 閱讀 6728

1 首先看執行計畫 explain,檢視是不是走了索引

2 沒有索引建立索引

3 sql 語句優化,拆分語句或者根據sql 語句特性優化

4 資料量大的話,資料庫io能力跟不上

5 建立了索引但是索引沒有生效

1 sql 語句原因

2 建立索引太多,索引冗餘,降低了查詢效率

3 資料量太小,全表查詢都比建立索引快

並不是所有索引對查詢都有效,sql是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引,如一表中有字段 ***,male、female幾乎各一半,那麼即使在***上建了索引也對查詢效率起不了作用。

索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。乙個表的索引數較好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有 必要。

6 硬體問題。如網路速度慢,記憶體不足,i/o吞吐量小,磁碟空間滿等 iostat

7 sql 出現了行級鎖 或者 表鎖。 通過 show processlist;

8 資料庫在重新整理髒頁

當我們要往資料庫插入一條資料、或者要更新一條資料的時候,我們知道資料庫會在記憶體中把對應欄位的資料更新了,但是更新之後,這些更新的字段並不會馬上同步持久化到磁碟中去,而是把這些更新的記錄寫入到 redo log 日記中去,等到空閒的時候,在通過 redo log 裡的日記把最新的資料同步到磁碟中去。

不過,redo log 裡的容量是有限的,如果資料庫一直很忙,更新又很頻繁,這個時候 redo log 很快就會被寫滿了,這個時候就沒辦法等到空閒的時候再把資料同步到磁碟的,只能暫停其他操作,全身心來把資料同步到磁碟中去的,而這個時候,就會導致我們平時正常的sql語句突然執行的很慢,所以說,資料庫在在同步資料到磁碟的時候,就有可能導致我們的sql語句執行的很慢了。

一條sql語句為何執行這麼慢

mysql是大多數場景下都可以使用的資料庫,大廠阿里很多都有用到,大家有沒有遇到一條sql語句執行速度很慢的情況呢,下面就我自己掌握的技能未大家分析分析,不足請補充指教。啟動mysql select from users where id 2 星號為了書寫方便 剛好你的 id 欄位上沒有索引,只能走...

一條Sql執行很慢的原因有哪些

說實話,這個問題可以涉及到mysql的很多核心知識,可以扯出一大堆,就像要考你計算機網路的知識時,問你 輸入ulr回車之後,究竟發生了什麼 一樣,看看你能說出多少來。一條sql語句執行的很慢,那是每次執行都很慢呢?還是大多數情況下是正常的,偶爾出現很慢呢?所以我覺得,我們還得分以下兩種情況來討論。1...

一條SQL的改寫

最近需求中需要實現這樣乙個功能 找主活動是未鎖定的,且已確認的子活動資料,表中資料的分布是這樣的 表中資料存放結構 主活動1 沒鎖定 子活動 主11 已確認 子活動 主22 已確認 主活動2 鎖定 子活動 主21 未確認 子活動 主22 已確認 1用 not exist實現 select t1.at...