程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MYSQL WHERE語句優化

MYSQL WHERE語句優化

編輯:MySQL綜合教程

MYSQL WHERE語句優化。本站提示廣大學習愛好者:(MYSQL WHERE語句優化)文章只能為提供參考,不一定能成為您想要的結果。以下是MYSQL WHERE語句優化正文


但請留意,上面的優化其實不是完整的。MYSQL實行了很多優化,但我沒時光全體測試.
MySQL的一些優化列鄙人面:
刪除不用要的括號:
((a AND b) AND c OR (((a AND b) AND (c AND d))))
-> (a AND b AND c) OR (a AND b AND c AND d)
常數調入:
(a<b AND b=c) AND a=5
-> b>5 AND b=c AND a=5
刪除常數前提:
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
-> B=5 OR B=6
索引應用的常數表達式僅盤算一次。
在一個單個表上的沒有一個WHERE的COUNT(*)直接從表中檢索信息。當僅應用一個表時,對任何NOT NULL表達式也如許做。
有效常數表達式的晚期檢測。MySQL疾速檢測某些SELECT語句是弗成能的而且不前往行。
假如你不應用GROUP BY或分組函數(COUNT()、MIN()……),HAVING與WHERE歸並。
為每一個子聯絡(sub join),結構一個更簡略的WHERE以獲得一個更快的WHERE盤算而且也盡快跳過記載。
一切常數的表在查詢中的在其他任何表之前被讀出。
一個常數的表是:
一個空表或一個有1行的表。
與在一個UNIQUE索引、或一個PRIMARY KEY的WHERE子句一路應用的表,這裡一切的索引部門應用一個常數表達式而且索引部門被界說為NOT NULL。
一切以下的表用作常數表:
mysql> SELECT * FROM t WHERE primary_key=1;
mysql> SELECT * FROM t1,t2 WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
春聯結表的最好聯絡組合是經由過程測驗考試一切能夠性來找到:(。假如一切在ORDER BY和GROUP BY的列來自統一個表,那末當聯絡時,該表起首被選中。
假如你應用SQL_SMALL_RESULT,MySQL將應用一個在內存中的表。
假如有一個ORDER BY子句和一個分歧的GROUP BY子句,或假如ORDER BY或GROUP BY包括不是來自聯絡隊列中的第一個表的其他表的列,創立一個暫時表。
由於DISTINCT被變換到在一切的列上的一個GROUP BY,DISTINCT與ORDER BY聯合也將在很多情形下須要一張暫時表。
每一個表的索引被查詢而且應用逾越少於30% 的行的索引。假如如許的索引沒能找到,將應用一個疾速的表掃描。
在一些情形下,MySQL能從索引中讀出行,乃至不消查詢數據文件。假如索引應用的一切列是數字的,那末只要索引樹被用來解答查詢。
在每一個記載被輸入前,那些不婚配HAVING子句的即將被跳過。
上面是一些疾速的查詢例子:
mysql> SELECT COUNT(*) FROM tbl_name;
mysql> SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
mysql> SELECT MAX(key_part2) FROM tbl_name
WHERE key_part_1=constant;
mysql> SELECT ... FROM tbl_name
ORDER BY key_part1,key_part2,... LIMIT 10;
mysql> SELECT ... FROM tbl_name
ORDER BY key_part1 DESC,key_part2 DESC,... LIMIT 10;
以下查詢僅應用索引樹便可處理(假定索引列是數字的):
mysql> SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
mysql> SELECT COUNT(*) FROM tbl_name
WHERE key_part1=val1 AND key_part2=val2;
mysql> SELECT key_part2 FROM tbl_name GROUP BY key_part1;
以下查詢應用索引以排序次序檢索,不消一次別的的排序:
mysql> SELECT ... FROM tbl_name ORDER BY key_part1,key_part2,...
mysql> SELECT ... FROM tbl_name ORDER BY key_part1 DESC,key_part2 DESC,...
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved