資料庫的優化問題

2021-10-06 16:07:19 字數 1879 閱讀 1079

(1)根據慢日誌定位慢查詢sql(將show_query_log設定為on,超過long_query_time的sql將被記錄在慢日誌show_query_log_file中);

set global show_query_log = on;//將慢日誌開啟

set global long_query_time = 1; //設定時間為1秒

(2)使用explain等工具分析該條sql(一般將explain放在select的前面,用來描述mysql如何執行查詢操作,成功返回結果及需要執行的行數,幫助我們分析select語句從而找到效率低下的原因,讓查詢優化器更好地工作),要重點關注type欄位(是否是index或者表示需要全表掃瞄的all)及extra欄位(是否是表示索引查詢的using index或者表示檔案查詢的using filesort)從而判斷是否需要調優。

(3)修改sql或者盡量讓sql去走索引

例:alter table person_info_large add index idx_name(name);//給name欄位設定普通索引

可以使用force index()去測試各種索引,例如

select count(id) from person_info_large;//可能在mysql的查詢優化器的作用下並不是使用主鍵索引id去查詢,而是使用了乙個在其看來更有效率的唯一索引account

select count(id) from person_info_large force index(primary);//強制使用主鍵索引

聯合索引(組合索引):是指乙個索引中包含多個列的索引(由多個列組成的索引)。

例如,如上圖所示,假設有兩個列area和title,index_area_title就表示乙個由area列和title列組成的聯合索引。

select * from person_info_large where area = 』 』 and title = 』 ';//命中了聯合索引index_area_title,會使用聯合索引進行查詢

select * from person_info_large where area = 』 ';//命中了聯合索引,也可以使用聯合索引進行查詢

select * from person_info_large where title = 』 ';//沒有命中聯合索引,只能進行全表掃瞄

最左字首匹配原則

(1)最左字首匹配原則是一種非常重要的規則,mysql會一直向右匹配直到遇到範圍查詢(>, 5 and d = 6"如果建立(a,b,c,d)順序的索引,則d是用不到索引的因此不會走聯合索引,而如果建立(a,b,d,c)順序的索引,則都可以用到因此會走聯合索引,而a、b、d的順序是可以任意調整的;

(2)=和in可以亂序,比如"where a = 1 and b = 2 and c = 3"建立(a,b,c)索引的順序可以是任意的,因為mysql查詢優化器會幫助你優化成索引可以識別的形式。

聯合索引的最左字首匹配原則的成因

mysql建立聯合索引的規則是首先會對聯合索引的最左邊(也就是第乙個)字段進行排序,在此基礎上再對第二個字段進行排序,是一種類似於"order by 欄位1,欄位2"這樣的一種排序規則,因此第乙個欄位是有序的,而第二個字段就是無序的了,所以如果直接按照第二個字段進行條件判斷是用不到索引的。

(1)資料量小的表不需要建立索引,建立索引會增加額外的開銷;

(2)資料變更需要維護索引,因此更多的索引意味著更多的維護成本;

(3)更多的索引也意味著需要更多的空間。

資料庫的優化問題

1.使用資料快取。可以將資料快取到檔案或者redis,memcache這樣的高速儲存系統中,來減少資料庫的查詢次數。2.結構優化。選擇合適的資料庫引擎常見的資料庫引擎有innodb,myisam 查詢較多的場景可以使用myisam,需要事務支援的場景可以選擇innodb。滿足基本的三正規化。選擇合適...

mysql 資料庫優化問題

可以先看一下我的另一篇文章 mysql調優 慢查詢 explain以及索引 分頁優化 然後還有乙個博文 mysql效能優化的最佳21條經驗 兩個儲存引擎的區別 詳見我的另一篇文章 mysql的儲存引擎以及innodb和myisam的索引結構 索引的使用場景 不會頻繁變化的多個值 經常在where語句...

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...