亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

MySQL怎樣優化WHERE子句

添加時間:2013-1-16 17:49:45  添加: 思海網絡 
where優化主要是在SELECT中,因為他們最主要是在那里使用,但是同樣的優化也可被用于DELETE和UPDATE語句。

  但請注意,下面的優化并不是完全的。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>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,...

關鍵字:MySQL、索引、信息

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站