新聞中心
mysqlgroupby能用到索引么?
讓group by 使用索引而不創(chuàng)建臨時(shí)表,使用索引的前提條件是:所有GROUP BY列引用同一索引的屬性,并且索引按順序保存其關(guān)鍵字(B-樹索引,不是HASH索引)至于DISTINCT 和GROUP BY哪個(gè)效率更高?

理論上 DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作還要為其他聚集函數(shù)進(jìn)行準(zhǔn)備工作。從這一點(diǎn)上將,GROUP BY操作做的工作應(yīng)該比DISTINCT所做的工作要多一些。但是實(shí)際上,DISTINCT操作,它會(huì)讀取了所有記錄;GROUP BY需要讀取的記錄數(shù)量與分組的組數(shù)量一樣多,比實(shí)際存在的記錄數(shù)目要少很多。
mysql注意事項(xiàng)?
1. 避免使用 select * 你需要什么信息,就查詢什么信息,查詢的多了,查詢的速度肯定就會(huì)慢
2. 當(dāng)你只需要查詢出一條數(shù)據(jù)的時(shí)候,要使用 limit 1 比如你要查詢數(shù)據(jù)中是否有男生,只要查詢一條含有男生的記錄就行了,后面不需要再查了,使用Limit 1 可以在找到一條數(shù)據(jù)后停止搜索
3. 建立高性能的索引 索引不是隨便加的也不是索引越多越好,更不是所有索引對(duì)查詢都有效
4. 建數(shù)據(jù)庫(kù)表時(shí),給字段設(shè)置固定合適的大小. 字段不能設(shè)置的太大,設(shè)置太大就造成浪費(fèi),會(huì)使查詢速度變慢
5. 要盡量使用not null
6. EXPLAIN 你的 SELECT 查詢 使用EXPLAIN,可以幫助你更了解MySQL是如何處理你的sql語句的, 你可以查看到sql的執(zhí)行計(jì)劃,這樣你就能更好的去了解你的sql語句的不足,然后優(yōu)化語句.
7. 在Join表的時(shí)候,被用來Join的字段,應(yīng)該是相同的類型的,且字段應(yīng)該是被建過索引的,這樣,MySQL內(nèi)部會(huì)啟動(dòng)為你優(yōu)化Join的SQL語句的機(jī)制。
8. 如果你有一個(gè)字段,比如“性別”,“國(guó)家”,“民族”, “省份”,“狀態(tài)”或“部門”,這些字段的取值是有限而且固定的,那么,應(yīng)該使用 ENUM 而不是 VARCHAR。
因?yàn)樵贛ySQL中,ENUM類型被當(dāng)作數(shù)值型數(shù)據(jù)來處理,而數(shù)值型數(shù)據(jù)被處理起來的速度要比文本類型快得多。這樣,我們又可以提高數(shù)據(jù)庫(kù)的性能。
9. 垂直分割 將常用和有關(guān)系的字段放在相同的表中,把一張表的數(shù)據(jù)分成幾張表 這樣可以降低表的復(fù)雜度和字段的數(shù)目,從而達(dá)到優(yōu)化的目的
到此,以上就是小編對(duì)于的問題就介紹到這了,希望這2點(diǎn)解答對(duì)大家有用。
當(dāng)前文章:mysqlgroupby能用到索引么?(mysql中的explain怎么使用)
新聞來源:http://m.5511xx.com/article/dhooisp.html


咨詢
建站咨詢
