mysql 效能優化點記錄

2021-06-02 14:44:18 字數 2874 閱讀 7252

mysql 效能優化點記錄

第一章myisam,可以基於blob和text的前500位元組,建立索引

myisam 支援fulltext

延遲更新索引

(delay_key_write)

create table `table3` (

`id` int(11) not null auto_increment,

`name` varchar(30) default null,

`id2` int(11) default null,

primary key (`id`)

)  engine=myisam default charset=utf8  delay_key_write = 1

alter table table2 delay_key_write = 1

只有myisam支援全文檢索

第三章 索引方面

字段盡可能的小

盡量避免null,用0代替。但是對效能的提公升很小,最後考慮,索引的列最好不適用null

mysql效能優化點記錄

一、優化資料訪問

查詢效能低下的最基本原因就是訪問了太多資料。一些查詢不可避免的要篩選大量的資料,單這並不常見。大部分效能欠佳的查詢都可以用減

少資料訪問的方式進行修改。在分析效能欠佳的查詢的時候,下面兩個步驟比較有用:

1.應用程式是否在獲取超過需要的資料。這通常是訪問了過多的行或列。

2.mysql伺服器是否分析了超過需要的行。

對於訪問的資料行很大,而生成的結果中資料行很少,可以嘗試修改。

1.使用覆蓋索引,它儲存了資料,所以儲存引擎不會去完整的行。

2.更改架構,乙個例子就是使用彙總表。

3.重寫複雜的查詢,讓mysql的優化器可以優化的執行。

二、複雜查詢和多個查詢

1.把乙個複雜的查詢分解為多個簡單的查詢。(mysql一般的伺服器,每秒鐘可以處理50 000個查詢)

2.三、縮短查詢

將一次處理大量資料的操作,分解為多個小操作。迴圈的方式每次處理一部分資料。一次刪除不要超過10 000行(delete)

四、分解鏈結

把乙個多表連線分解成多個單個查詢,然後在應用程式裡實現聯接。

這樣的優勢

1.快取效率高。

2.mysql,可以更有效的利用表鎖,查詢會鎖住單個表較短時間。

3.應用程式進行聯接可以更方便的拓展資料庫,把不同表放在不同伺服器上。

4.查詢更高效。

5.可以減少多餘的行訪問,可以減少網路流量和記憶體消耗。

小結:在程式端進行聯接的效率更高

1.可以快取早期查詢的大量資料。

2.使用了多個myisam表

3.資料分布在不同的伺服器上。

4.對於大表使用in替換聯接

5.乙個連線引用了同乙個表多次。

當你重建彙總和快取表的時候,在操作的時候你常常需要它們的資料保持可見。你可以使用「shadow table」(影像表)來實現。當你已經建立它之後,你可以使用原子性的重新命名來交換這些表。舉個例子,如果

你需要重建my_summary,你能建立my_summary_new,填充資料,把它和真正的表作交換。

mysql> drop table if exists my_summary_new, my_summary_old;

mysql> create table my_summary_new like my_summary;

-- populate my_summary_new as desired

mysql> rename table my_summary to my_summary_old, my_summary_new to my_summary;

mysql執行查詢的一般性過程

1.客戶端傳送查詢到伺服器

2.伺服器檢查查詢快取,

3.伺服器解析,預處理和優化查詢,生成執行計畫。

4.執行引擎呼叫儲存引擎api執行查詢。

5.伺服器將結果傳送到客戶端。

mysql客戶端、伺服器協議

1.協議是半雙工的。mysql伺服器在某個時間可以傳送或者接受資料,單不能同時傳送和接收。所有沒有辦法階段訊息。

2.客戶端用乙個資料報將查詢傳送到伺服器,所以max_packet_size這個配置引數對於大查詢很重要的原因。

3.客戶端從伺服器提取資料的時候是伺服器產生資料的同時把它們「推」到客戶端的,客戶端只需要接收推出來的資料,無法告訴伺服器停止

傳送資料。

查詢快取

select sql_no_cache * from ol_answerlog limit 1000

show status like 'last_query_cost'

關鍵字straight_join 強制執行引擎按照查詢中表現的順序來進行鏈結操作。

嚴格的說,mysql不回嘗試減少讀取的行數,它只會試著優化對頁面的讀取,但是行數可以大致顯示查詢的開銷。

連線優化器試著產生最低開銷的查詢計畫。在可能的時候,他會從單錶計畫開始,檢查所有的可能的子樹的組合。但是對n個表連線,需要檢

查組合的數量就是n的階乘,這個數量稱為ie搜尋空間, 它增長非常快,如果乙個查詢需要連線10個表,那麼要檢查的數量將是10!=36288000

當搜尋空間非常巨大的時候優化耗費的時間就會非常長,這時候伺服器就不回執行完整的分析,但表的數量超過optimizer_search_depth的值

時,它就會走捷徑,比如執行所謂的 貪婪搜尋。

show table status from `servant_591up`where engine is not null

and name like '%ol_ans%';

max min的優化

select min(id) from ol_user where username = '[email protected]'

Mysql效能優化點

全值匹配我最愛 最佳左字首法則如果索引了多列,要遵守最左字首法則。具體是指,查詢的where條件從索引的最左前列開始並且不跳過索引的中間列 不在索引列上做任何操作 計算 函式 自動or手動 型別轉換 會導致索引失效 儲存引擎不能使用索引中範圍條件右邊的列 盡量使用覆蓋索引 索引列和查詢列一致 減少s...

C 專案效能優化點 記錄

最近入職新公司,要做乙個高效能的專案,對比之前公司的 確實有一些細節是能夠提公升效能的,所以記錄一下,發現一點就記錄一點 不侷限於公司專案中用到的,其它地方看到的也會記錄 持續更新 define likely x builtin expect x 1 x很可能為真 define unlikely x...

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...