什麼是效能下降?
其實就是**執行的環境變了,那麼環境變化是什麼?
比如cpu上公升了,記憶體滿了。有或者表中數量增加了,量變了。
其實這些是dba幹的,但是呢,我們也需要去了解下,並且優化我們的code。
簡單介紹乙個量大的情況,那麼這個時候我們可能會建立索引,其實也不是量大去建立索引,而是量大且查詢資料多,修改少。
在此舉個栗子:
select * from employees where first_name='martial'
我在一張30w的employees 中做查詢。
查詢出來的結果為:
受影響的行: 0
通過查詢發現索引只有主鍵:
然後這是就想,如果要是在first_name中建立主鍵,那麼是否能提公升。
create index idx_first_name on employees(first_name)
看下效果繼續執行查詢:
[sql] select * from employees where first_name='martial'
受影響的行: 0
效果明顯哈。
當然這很簡單,現在複雜一點點,這樣子。
怎麼說呢,就是要有first_name 和 last_name 一起。
這時候就要建立復合索引。
create index idx_first_name on employees(first_name,last_name )
在下就在次執行重複操作了。
同樣我們可以看到我使用了*,這時候問題同樣來了,你想想看,這個語句效能就不好了。
同樣如果效能下降了,還要從語句下手。
在我進公司的時候,有乙個專門搞資料庫的部門,設計師設計資料庫的時候,我們查一條要join好幾張表,這就是設計問題,後來改了表結構,但是代價有多大可以自己想到。
最後效能不強的還有一些配置,如執行緒數量,這個和硬體有關,專業dba幹了,我們也很難去搞定。
mysql效能抖動原因
之前文章介紹了 wal 機制。現在你知道了,innodb 在處理更新語句的時候,只做了寫日誌這乙個磁碟操作。這個日誌叫作 redo log 重做日誌 當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體資料寫入到磁碟後,記憶體和磁碟上的資料頁的內容就一致了,稱為 乾淨頁 平...
SSD效能(跑分)下降的主要原因
對於接觸ssd不久的人,經常都會產生一種疑問,那就是當ssd使用過一段時間後,再執行測試 軟體,得到的成績幾乎都肯定要比剛買回來時差,而且時間越長,差距就越明顯,這是為什麼呢?nand 快閃儲存器無法進行覆蓋操作,在已經被寫入資料的位置,要重複寫入的話,ssd就必須先對該位置進行擦除的操作,而且擦除...
MySQL 偶爾抽風,效能突然下降
有時會碰到這樣的情況,一條 sql 在平時執行沒問題,很快。但是突然某個時間執行的就會很慢,而且這種場景並不能復現,只能隨機傳送的。在之前講解 mysql redo log 時,說到了 wal 機制,為了保證 mysql 更新的速度,在進行更新操作時,先將更新內容寫入 redo log,後續系統空閒...