關於Mysql優化的一點筆記

2021-10-02 21:32:28 字數 1901 閱讀 4694

目錄:

一、使用慢查詢日誌以及分析工具

二、sql語句優化

三、索引優化

四、資料庫結構優化

一、慢查詢日誌以及分析工具

1、臨時開啟慢查詢日誌

mysql> set global slow_query_log='on'

;query ok, 0 rows affected (0.00 sec)

mysql> set global slow_query_log_file='/var/lib/mysql/instance-1-slow.log'

;query ok, 0 rows affected (0.00 sec)

mysql> set global long_query_time=2;

query ok, 0 rows affected (0.00 sec)

2、永久開啟慢查詢日誌

slow_query_log = on

slow_query_log_file = /

var/lib/mysql/instance-1-slow.log

long_query_time = 2

二、sql語句優化

1、子查詢優化,可以將子查詢更換為join查詢,如果存在一對多的關係,可以distinct進行去重;

2、group by涉及到多表關聯、但只對一表進行分組的情況下

a 優化策略:

先給分組欄位建索引

再對該錶分組,分組後再和其他表關聯查詢

b 優化理論:

先利用索引將結果集快速最小化、然後再和其他表關聯
3、order by盡量使用主鍵或者有索引的列進行排序

三、索引優化

1.使用最左字首規則

如果使用聯合索引,要遵守最左字首規則。即要求使用聯合索引進行查詢,從索引的最左前列開始,不跳過索引中的列並且不能使用範圍查詢(>、<、between、like)。

2.模糊查詢不能利用索引(like 『%xx』或者like 『%xx%』)

假如索引列code的值為』aaa』,『aab』,『baa』,『bab』,如果where code like '%ab』條件,由於條件前面是模糊的,所以不能利用索引的順序,必須逐個查詢,看是否滿足條件。這樣會導致全索引掃瞄或者全表掃瞄。

3.不要過多建立索引

過多的索引會占用更多的空間,而且每次增、刪、改操作都會重建索引。

四、資料庫結構優化

1、選擇合適的資料型別,例:

a、利用mysql的inet_aton()和inet_ntoa()函式儲存ip位址,儲存型別為bigint,比varchar節省七八個位元組

b、對於一些固定長度的內容,如時間戳加密的密碼等,可以用int或者char來儲存

2、表的正規化化設計

目前說到的正規化華一般是指第三設計正規化,也就是要求資料表中不存在非關鍵字段對任意候選關鍵字段的傳遞函式依賴;

白話一點的說法就是避免資料冗餘,也就是我們常說的解耦。比如一張表中有商品詳細字段,又有商品分類詳細的字段。這種情況我們完全可以將這些拆成兩個表,避免了更多的增刪改操作

3、表的反正規化化設計

反正規化化是指為了查詢效率的考慮把原本符合第三正規化的表適當的增加冗餘,以達到優化查詢效率的目的,反正規化華是一種以空間來換取時間的操作

關於new的一點筆記

必須delete用new建立物件的那個位址。而樓主pa getpointa 這樣其實已經改變了原來的那個new出來的位址,這時候delete就可能有問題了 如果getpointa返回的也是同一種型別的指標,且該指標也是被new出來的話,那麼delete pa這句話本身也不會出錯。否則,就錯了 另外,...

關於Binder的一點筆記

這個方法是用來將服務端的binder物件轉換成客戶端所需的aidl介面型別物件,這種轉換時區分程序的,那麼如何區分呢?咱們先做乙個實驗,建立乙個service,在乙個activity中繫結它,然後再將service設定為與activity同一程序和不再同一程序兩種情況,並列印出serviceconn...

關於git的一點筆記

很早的時候註冊了github,然後搞了一些自己寫的 上去,逐漸學會了使用git,但是目前也僅僅是乙個很淺的初級,覺得有必要記錄一下呵呵。1 在github上面建立乙個倉庫 2 git clone dddddd dir 轉殖到本地 3 git add 新增檔案到working memory 4 git...