SQL優化總結

2021-08-27 21:15:16 字數 720 閱讀 5006

1,子查詢優化後問題

有些欄位的區分度飄忽飄忽不定,比如status欄位。我們這個欄位在專案中使用了索引。老版本優化時把主鍵id查出來放到子查詢中,再用status進行篩選,這樣有效果。公升級了mysql之後,出現慢查詢。這個時候子查詢不再適用,應使用ignore index (status_idx) 忽略區分度不高的索引。

引申:force index

2,mysql排序問題

如果使用非唯一字段進行order by,那麼有可能會出現資料丟失。mysql在對重複資料排序時,選擇是隨即的,所以你第一頁出現的資料,第二頁有可能重複出現,導致應該第二頁出現的資料丟失。這樣的case解決方式是使用主鍵放在排序因子中。

3,使用gap鎖引發的死鎖

如果在**中,先進行刪除再進行插入。在併發的情況下,next-key鎖會與插入意向鎖衝突,形成阻塞,最終造成死鎖

select * from product where id > =(select id from product limit 866613, 1) limit 20

select * from orders_history where id >= 1000001 limit 100;

select * from orders_history where id in

(select order_id from trade_2 where goods = 『pen』)

limit 100;

參考:

SQL優化總結

1.首先在建表的時候,選用最合適的字段型別。例如在定義name欄位時,可以使用varchar 32 不要使用char 32 以減少不必要的空間 而在定義郵編 郵編固定6位 時也沒必要使用varchar 6 了,直接使用char 6 會更好 對於性別,省份等可以定義為enum型別,因為數值型的資料檢索...

SQL優化總結1

oracle 優化手段 指執行sql時繫結變數,減少軟解析時間。result cache 將某更新不頻繁的表的結果中存在快取中,下次直接讀快取,如果改表有更新,快取自動失效 表聯合查詢時,9i前大表 結果集 小表 結果集 的位置 block塊的大小的設定,設定小,則io頻繁,cup低耗,反之反之 索...

sql 語句優化總結

我們如何更迅速的從乙個大型專案中,知道是什麼影響了服務的效能。mysql 提供了一些常用的命令來查詢資料庫的執行狀態。1.show status like uptime 檢視mysql資料庫執行了多長時間 2.show status like com select 檢視mysql 資料庫的查詢次數 ...