mysql優化(第一部分)

一、設計侷限和初衷

1、MyISAM存儲引擎,MySQL使用極快速的表鎖定,以便允許多次讀或一次寫。使用該存儲引擎的最大問題出現在同一個表中進行混合穩定數據流更新與慢速選擇。

2、爲了更容易地讓非事務表順利工作,爲所有NOT NULL列設置默認值。

3、不是運行在嚴格模式或TRADITIONAL SQL模式時,插入值會變爲“最好可能值”。

4、所有表達式的計算結果返回一個表示錯誤狀況的信號。例如,1/0返回NULL。(使用ERROR_FOR_DIVISION_BY_ZERO SQL模式可以更改該行爲)。


二、爲可移植性設計應用程序

1、因爲不同SQL服務器實現了標準SQL的不同部分,需要花功夫來編寫可移植的SQL應用程序。對很簡單的選擇/插入,很容易實現移植,但是需要的功能越多則越困難。如果想要應用程序對很多數據庫系統都快,它變得更難。

2、MySQLcrash-me程序來找出能用於數據庫服務器選擇的函數、類型和限制。crash-me並不能找出所有的特性,但是其廣度仍然很合理,可以進行大約450個測試。

3、前端使用緩存時,表創建信息應該包含緩存初始大小和表刷新頻率等信息。


三、優化SELECT語句和其它查詢

1、影響所有語句的一個因素是:你的許可設置得越複雜,所需要的開銷越多。

2、執行GRANT語句時使用簡單的許可,當客戶執行語句時,可以使MySQL降低許可檢查開銷。例如,如果未授予任何表級或列級權限,服務器不需要檢查tables_priv和columns_priv表的內容。同樣地,如果不對任何 賬戶進行限制,服務器不需要對資源進行統計。如果查詢量很高,可以花一些時間使用簡化的授權結構來降低許可檢查開銷。

3、select benchmark(執行次數,表達式),例如:select benchmark(1000000,date_add(now(),interval 1 day));該語句執行的時間是date_add執行一百萬次的時間。

4、explain語句:

(1)explain table_name:相當於desc tablename或show columns from table_name;

(2)用join鏈接多張表時,返回多行數據,且這些數據是以表被讀入的順序列出;多表的執行方式是,先從第一張表獲取一條記錄,在查找第二張表,接着第三張,可見多表聯合查詢速度很慢。

(3)當使用EXTENDED關鍵字時,EXPLAIN產生附加信息,可以用SHOW WARNINGS瀏覽。該信息顯示優化器限定SELECT語句中的表和列名,重寫並且執行優化規則後SELECT語句是什麼樣子。

(4)explain結果各列:

id:select標識符;

select_type:select類型,包含simple(不包含union和子查詢)、primary、unoin(union語句第二個或後面的,取決於外查詢)、union result(union結果)、subquery(子查詢的第一個select)、dependent subquery(子查詢的第一個select)、derived(導出表的sect,from子查詢);

table:引用的表;

type:鏈接類型,包含system(只有一行,是const的特例)、const(只有一行常用於primary key 和unique)、eq_ref(簡單的說,這是多表查詢的const,也是用在primary key和unique)、ref(不只一行,比如:name='hehe',記錄數可以有多條)、ref_or_null(包含or name is null 的ref)、index_merge(索引合併法)、unique_subquery(用於in子查詢的primary key)、index_subquery(用於in子查詢,非主鍵)、range(用於範圍表達式,包括in、between等)、index(使用了普通索引)、all(全表掃描)共十一種;

possible_keys:能使用的索引;

key:實際使用的索引;

key_len:鍵長,通過key_len值我們可以確定MySQL將實際使用一個多部關鍵字的幾個部分。

ref:ref列顯示使用哪個列或常數與key一起從表中選擇行;

rows:必須檢查的行數;

Extra:解決查詢的重要信息,包括Distinct(只匹配一行)、



四、優化語句:

1、怎麼優化where字句:

(1)除去重疊的常量,如:a>b and a=c abd b=5應改爲 a>5 and a=c and b=5;



發佈了12 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章