日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MYsql优化where子句

發(fā)布時間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MYsql优化where子句 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ?該部分討論where子句的優(yōu)化,不僅select之中,相同的優(yōu)化同樣試用與delete 和update語句中的where子句;

? ? 1: 移去不必要的括號:

((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)

? ? ?2:常量合并:

(a<b AND b=c) AND a=5 -> b>5 AND b=c AND a=5

? ? ?3:常量條件去除:

(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6) -> B=5 OR B=6

? ? ?4:indexes 常量表達(dá)式只被計算一次:

? ? ?5:沒有where 條件的 單表 Count(*)直接檢索Information_schema庫中的統(tǒng)計信息(對 myisam 和 memory表)。?

? ? ?6:更早的察覺無效的常量表達(dá)式。mysql快速發(fā)現(xiàn)select語句中不可能成立的where條件并且返回no rows;

? ? ?7: 如果沒有使用group by 或者聚合函數(shù)(count(),min().max()),having子句會被合并到where 子句中;

? ? ?8:做鏈接的每個table,一個快速的where子句構(gòu)造原則是盡可能的跳過更多的行;

? ? ?9:查詢中,所有 constant table 都在其他表之前讀取,constant table 定義如下:

? ? ? ? ? ? ?1.1 : 一個空表或者只有一行數(shù)據(jù)的表;

? ? ? ? ? ? ?1.2: ? 一個以主鍵 或唯一索引為 where條件子句的表,并且所有的Index部分都是和常量表達(dá)式比較,不為null(unique index 可能包含多個null);

? ? ? ? ??

SELECT * FROM t WHERE primary_key=1; SELECT * FROM t1,t2WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

? ? ? 10: 通過嘗試所有可能性,找到最好的表join組合情況,如果order by子句和group by 子句中的所有列都來至同一張表,那么該表在join時優(yōu)先read;

? ? ? 11:如果order by子句和 group by子句不同,或者order by Or group by 包含不在查詢隊列第一張表的中的列,那么會創(chuàng)建 temporary table;

? ? ? 12: 優(yōu)化器如果認(rèn)為使用index 會比表scan 更高效,則會選擇使用index,scan表會被使用,如果最好的index需要scan多于30%的表記錄,但是一個固定的比例不會確定使用table scan或者走index,優(yōu)化器更加復(fù)雜,根據(jù)在額外的因數(shù),eg:表的大小,行數(shù),block快的大小;

? ? ? 13: 有些情況下,mysql 可以讀取Index 數(shù)據(jù)而不必回訪data file(base table)(索引覆蓋);

? ? ?下面的快速例子:

SELECT COUNT(*) FROM tbl_name;SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;SELECT MAX(key_part2) FROM tbl_nameWHERE key_part1=constant;SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... LIMIT 10; SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10; 以下是mysql只查詢 index B-Tree,假設(shè)index 列值為數(shù)值型: SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;SELECT COUNT(*) FROM tbl_nameWHERE key_part1=val1 AND key_part2=val2;SELECT key_part2 FROM tbl_name GROUP BY key_part1;

以下是用index來避免Filesort

SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... ;SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... ;

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/onlysun/p/4516756.html

總結(jié)

以上是生活随笔為你收集整理的MYsql优化where子句的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。