国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 優化之COUNT(*)效率分析

2024-07-24 12:39:11
字體:
來源:轉載
供稿:網友

剛給一個朋友解決他寫的Discuz!插件的問題,說到MySQL的COUNT(*)的效率,發現越說越說不清楚,干脆寫下來,分享給大家.

COUNT(*)與COUNT(COL),網上搜索了下,發現各種說法都有.

比如認為COUNT(COL)比COUNT(*)快的,認為COUNT(*)比COUNT(COL)快的,還有朋友很搞笑的說到這個其實是看人品的.

在不加WHERE限制條件的情況下,COUNT(*)與COUNT(COL)基本可以認為是等價的,但是在有WHERE限制條件的情況下,COUNT(*)會比COUNT(COL)快非常多.

具體的數據參考如下:

  1. mysql> SELECT COUNT(*) FROM cdb_posts where fid = 604; 
  2. +------------+ 
  3. COUNT(fid) | 
  4. +------------+ 
  5. | 79000 | 
  6. +------------+ 
  7. 1 row in set (0.03 sec) 
  8.  
  9. mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604; 
  10. +------------+ 
  11. COUNT(tid) | 
  12. +------------+ 
  13. | 79000 | 
  14. +------------+ 
  15. 1 row in set (0.33 sec) 
  16.  
  17. mysql> SELECT COUNT(pid) FROM cdb_posts where fid = 604; 
  18. +------------+  --Vevb.com 
  19. COUNT(pid) | 
  20. +------------+ 
  21. | 79000 | 
  22. +------------+ 
  23. 1 row in set (0.33 sec) 

COUNT(*)通常是對主鍵進行索引掃描,而COUNT(COL)就不一定了,另外前者是統計表中的所有符合的紀錄總數,而后者是計算表中所有符合的COL的紀錄數。還有有區別的。

COUNT時的WHERE解決辦法

順便提下mysql的DISTINCT的關鍵字有很多你想不到的用處

1.在count 不重復的記錄的時候能用到,代碼如下:

SELECT COUNT( DISTINCT id ) FROM tablename;

就是計算talbebname表中id不同的記錄有多少條.

2,在需要返回記錄不同的id的具體值的時候可以用,代碼如下:

SELECT DISTINCT id FROM tablename;

返回talbebname表中不同的id的具體的值.

3.上面的情況2對于需要返回mysql表中2列以上的結果時會有歧義,代碼如下:

SELECT DISTINCT id, type FROM tablename;

實際上返回的是 id與type同時不相同的結果,也就是DISTINCT同時作用了兩個字段,必須得id與tyoe都相同的才被排除了,與我們期望的結果不一樣.

簡單說下,就是COUNT的時候,如果沒有WHERE限制的話,MySQL直接返回保存有總的行數,而在有WHERE限制的情況下,總是需要對MySQL進行全表遍歷.

優化總結,對于MyISAM表來說:

1.任何情況下SELECT COUNT(*) FROM tablename是最優選擇;

2.盡量減少SELECT COUNT(*) FROM tablename WHERE COL = 'value' 這種查詢;

3.杜絕SELECT COUNT(COL) FROM tablename WHERE COL2 = 'value' 的出現。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武平县| 巴东县| 松原市| 万源市| 丹寨县| 于都县| 宣恩县| 镶黄旗| 辽宁省| 江川县| 楚雄市| 嘉兴市| 岗巴县| 巴东县| 溆浦县| 年辖:市辖区| 靖江市| 潜江市| 凯里市| 喀喇| 中牟县| 鄢陵县| 九龙坡区| 江永县| 即墨市| 武乡县| 马边| 乐清市| 威远县| 隆林| 溧阳市| 志丹县| 镇江市| 霍城县| 浦东新区| 中卫市| 阳谷县| 张家界市| 资溪县| 清水县| 千阳县|