欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
count(1)比count(*)效率高?

SELECT COUNT(*) FROM table_name是個(gè)再常見(jiàn)不過(guò)的統計需求了。
本文帶你了解下MysqlCOUNT函數。

一、COUNT函數

關(guān)于COUNT函數,在MySQL官網(wǎng)中有詳細介紹

翻譯一下:

  1. COUNT(expr) ,返回SELECT語(yǔ)句檢索的行中expr的值不為NULL的數量,結果是一個(gè)BIGINT值。
  2. 如果查詢(xún)結果沒(méi)有命中任何記錄,則返回0
  3. COUNT(*) 的統計結果中,會(huì )包含值為NULL的行數。

《阿里巴巴Java開(kāi)發(fā)手冊》也有如下要求:

二、COUNT(列名)、COUNT(常量)COUNT(*)

前面我們提到過(guò)COUNT(expr)用于做行數統計,那么COUNT(列名)、 COUNT(常量)COUNT(*)這三種語(yǔ)法中,expr分別是列名、 常量 和 *。

2.1 COUNT(*)COUNT(常量)

在列名、常量和 *這三個(gè)條件中,常量是一個(gè)固定值,肯定不為NULL。*可以理解為查詢(xún)整行,所以肯定也不為NULL,那么就只有列名的查詢(xún)結果可能是NULL。

所以, COUNT(常量)COUNT(*)表示的是直接查詢(xún)符合條件的數據庫表的行數。而COUNT(列名)表示的是查詢(xún)符合條件的列的值不為NULL的行數。

2.2 COUNT(*)COUNT(1)區別

COUNT(1)就是COUNT(常量),對于這二者到底有沒(méi)有區別:

  1. 有的說(shuō)COUNT(*)執行時(shí)會(huì )轉換成COUNT(1),所以COUNT(1)少了轉換步驟,所以更快。
  2. 還有的說(shuō),因為MySQL針對COUNT(*)做了特殊優(yōu)化,所以COUNT(*)更快。

到底哪種說(shuō)法是對的?看下MySQL官方文檔:

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

通過(guò)文檔,對于COUNT(1)COUNT(*),MySQL的優(yōu)化是完全一樣的,根本不存在誰(shuí)比誰(shuí)快!

2.3 COUNT(列名)

相較于前兩者,COUNT(列名)的查詢(xún)就比較簡(jiǎn)單粗暴了,就是進(jìn)行全表掃描,然后判斷指定字段的值是不是為NULL,不為NULL則累加。

相比COUNT(*),COUNT(列名)多了一個(gè)步驟就是判斷所查詢(xún)的字段是否為NULL,所以他的性能要比COUNT(*)慢。
here和group的條件查詢(xún)。

2.4 SQL92

除了查詢(xún)得到結果集有區別之外,COUNT(*)相比COUNT(常量)COUNT(列名)來(lái)講,COUNT(*)SQL92定義的標準統計行數的語(yǔ)法,因為他是標準語(yǔ)法,所以MySQL數據庫對他進(jìn)行過(guò)很多優(yōu)化。

SQL92,是數據庫的一個(gè)ANSI/ISO標準。它定義了一種語(yǔ)言(SQL)以及數據庫的行為(事務(wù)、隔離級別等)。

2.5 COUNT(*)優(yōu)化

因為COUNT(*)SQL92定義的標準統計行數的語(yǔ)法,所以MySQL對其進(jìn)行了很多優(yōu)化:

  1. MyISAM中會(huì )直接把表的總行數單獨記錄下來(lái)供COUNT(*)查詢(xún)
  2. InnoDB會(huì )在掃表的時(shí)候選擇最小的索引來(lái)降低成本。

這些優(yōu)化的前提都是沒(méi)有進(jìn)行wheregroup的條件查詢(xún),更多請參考MySQL 全表 COUNT(*) 簡(jiǎn)述

三、總結

COUNT函數用于統計表行數,按照效率比較的話(huà):

count(*)=count(常量)>count(列名)

3.1 小建議

既然 count(*) 在查詢(xún)上依賴(lài)于所有的數據集,所以我們在設計上也需要盡量的規避全量 count。

通常情況我們針對可預見(jiàn)count 查詢(xún)會(huì )做適當的緩存,可以是 Redis,也可以是獨立的 MySQL count 表。

3.2 技術(shù)交流

  1. 風(fēng)塵博客
  2. 風(fēng)塵博客-掘金
  3. 風(fēng)塵博客-博客園
  4. Github
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
重新認識MySQL中的COUNT語(yǔ)句
select case when的一些用法以及IF的用法
《MySQL 8.0數據庫管理與應用》第5章 MySQL語(yǔ)言
mysql函數
我的MYSQL學(xué)習心得(六) 函數
MySQL學(xué)習筆記七:常用函數
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久