前端時間跟一個DB相關的項目,alanc反饋有一個查詢,使用索引比不使用索引慢很多倍,有點毀三觀。所以跟進了一下,用explain,看了看2個查詢不同的結果。 不用索引的查詢的時候結果如下,實際查詢中速度比較塊。 mysql> explain select * from ...
前言 又和大家見面了 又兩周過去了,我的雲筆記里又多了幾篇寫了一半的文章草稿。有的是因為質量沒有達到預期還准備再加點內容,有的則完全是一個靈感而已,內容完全木有。羡慕很多大佬們,一周能產出五六篇文章,給我兩個肝我都不夠。好了,不多說廢話了... 最近在線上環境遇到了一次SQL慢查詢引發的數據庫故障,影響線上業務。經過排查后,確定原因是SQL在執行時,MySQL優化器選擇了錯誤的索引 不應該說是 ...
2020-07-30 20:39 1 813 推薦指數:
前端時間跟一個DB相關的項目,alanc反饋有一個查詢,使用索引比不使用索引慢很多倍,有點毀三觀。所以跟進了一下,用explain,看了看2個查詢不同的結果。 不用索引的查詢的時候結果如下,實際查詢中速度比較塊。 mysql> explain select * from ...
MySQL 中,可以為某張表指定多個索引,但在語句具體執行時,選用哪個索引是由 MySQL 中執行器確定的。那么執行器選擇索引的原則是什么,以及會不會出現選錯索引的情況呢? 先看這樣一個例子: 創建表 Y,設置兩個普通索引, 創建一個存儲過程用於插入數據。 MySQL: 5.7.27 ...
1、基本概念 在MySQL中一張表其實是可以支持多個索引的。但是,你寫SQL語句的時候,並沒有主動指定使用哪個索引。也就是說,使用哪個索引是由MySQL來確定的。 一般在數據庫使用的時候回遇到這樣的問題,一條本來可以執行很快的語句,卻由於MySQL選錯了索引,導致執行 ...
背景 最近一個后台功能列表,業務人員反饋查詢和導出速度非常慢。 通過定位發現列表查詢和數據導出都是使用的同樣的一個連表查詢SQL。 這個功能剛上線不久,起初查詢和導出速度都是蠻快的,把這個SQL放到測試環境也是挺快的。 對比了一下測試環境和生產環境相關表結構都是一樣的,之后我們把目光放在 ...
結論:添加索引時,如果有對該表的慢查詢,會導致索引添加延時等待 添加索引語句:alter table tb_name add index idx_xx(col_name); 執行添加索引的SQL: 通過show processlist; 發現有鎖 ...
mysql 查詢所有碎片語句 SHOW TABLE STATUS LIKE 'logs' ---------logs是帶有索引的表名稱 如果Data_free大於0 表示有索引碎片產生 可以使用如下語句清理碎片 OPTIMIZE TABLE `logs` -------logs ...
前面我們介紹過索引,你已經知道了在MySQL中一張表其實是可以支持多個索引的。但是,你寫SQL語句的時候,並沒有主動指定使用哪個索引。也就是說,使用哪個索引是由MySQL來確定的。 不知道你有沒有碰到過這種情況,一條本來可以執行得很快的語句,卻由於MySQL選錯了索引,而導致執行速度變得 ...
最近查看慢查詢日志,一直有看到SELECT * FROM tb_name的SQL語句,在之前SQL審核的時候,也沒發現有這些SQL的存在,所以很好奇這里怎么出現的,后來用了vc-mysql-sniffer腳本去抓SQL來分析,也沒有找出SELECT * 之類的SQL,下面我上圖讓分析一下 ...