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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL优化(四):count()

發(fā)布時間:2023/12/3 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL优化(四):count() 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

count()不同寫法的區(qū)別

COUNT(字段名):返回SELECT語句檢索的行中值不為NULL的行數(shù)

COUNT(1):表示的是直接查詢符合條件的數(shù)據(jù)庫表的行數(shù)(會包含值為NULL的行數(shù))。其中1指的是表中的第一個字段,如有表 table(id, column1),則1指 id。

COUNT(*):表示的是直接查詢符合條件的數(shù)據(jù)庫表的行數(shù)(會包含值為NULL的行數(shù)),其中* 指所有所有字段,并且是SQL92定義的標(biāo)準(zhǔn)統(tǒng)計行數(shù)的語法,因為是標(biāo)準(zhǔn)語法,所以MySQL數(shù)據(jù)庫進行過很多優(yōu)化,推薦使用。

COUNT(1)和COUNT(*)區(qū)別

MySQL官方文檔這么說:

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

即InnoDB 對 count(1) 和 count(*) 的進行相同操作,兩者性能相同。
由上述可知,可以把count(*) 和 count(1) 相同對待, 都是計算滿足條件的行數(shù)(包括NULL),但count(*)是標(biāo)準(zhǔn)語法,所以推薦使用count(*)

count() 索引使用情況

(1) count(*)、count(1)、count(主鍵)

如果存在二級索引則,mysql會使用二級索引計算 count(*)、count(1)、count(主鍵) 的值。

如果不存在二級索引則使用 主鍵索引(聚簇索引)計算 count(*)、count(1)、count(主鍵) 的值。

因為二級索引只存主鍵值,而沒存真實數(shù)據(jù),所以二級索引樹比主鍵索引樹更小,所以mysql優(yōu)化器會選擇成本更小的二級索引,不過要注意成本小,不意味著消耗時間少,這二者不是完全等同的。

具體案例分析可參考:

  • 使用Count(*),count(主鍵),count(1)時,是走主鍵索引還是二級索引
  • SELECT COUNT(*) 是否會造成全表掃描?

(2) count(非主鍵字段)

如果不存在包含該字段的索引,則會通過全表掃描來計算 count(字段)的值。

如果存在包含該字段的二級索引,則會通過掃描此二級索引 計算 count(字段) 的值。字段在索引的順序無影響,只要索引包含該字段,即可利用該索引計算行數(shù)。

總結(jié)

(1) count(*)、count(1)、count(主鍵) 如果存在任何一個二級索引就會通過二級索引計算,否則使用主鍵索引

(2) count(非主鍵) 如果存在包含該字段的索引則通過索引計算,否則會使用全表掃描

總結(jié)

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

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