MySQL中COUNT如何使用-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關(guān)MySQL中COUNT如何使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

10年積累的網(wǎng)站制作、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有綠春免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

COUNT(expr)返回檢索行中expr不為NULL的數(shù)量,其結(jié)果是一個BIGINT類型的值,如果沒有符合行,那么返回0。該處需要注意的是所謂的NULL指的是expr表達式,并不是所需要檢測的數(shù)據(jù)行的值,如果expr與數(shù)據(jù)列名相同,那么則返回該數(shù)據(jù)列不為NULL的數(shù)量。

MySQL的COUNT

對于傳統(tǒng)的存儲引擎InnoDb而言,存儲一個表的精確行數(shù)是十分困難的,因為多事務(wù)操作可能會并發(fā),并且同時影響表的行數(shù),所以為了避免并發(fā)線程查詢同一個表而得到不同的行數(shù),InnoDb沒有對表的行數(shù)進行內(nèi)部存儲,所以在InnoDb中,SELECT(*)僅僅返回當(dāng)前事務(wù)所讀取到的行數(shù)。在MySQL5.7.18之前,InnoDb通過掃描聚簇索引來處理SELECTCOUNT(*)語句,5.7.18之后InnoDb使用最小且可用的第二索引來處理SELECTCOUNT(*)語句(除非查詢優(yōu)化器提示使用一個其他的索引)。如果沒有第二索引,那么需要掃描聚簇索引。

如果索引記錄沒有全部在緩沖池中,那么處理SELECTCOUNT(*)語句是需要耗費一些時間的。如果需要追求一個快速的計算,那么可以在應(yīng)用中單獨設(shè)計一個表用于在目標表進行插入或刪除操作時記錄其數(shù)據(jù)條數(shù)。然而,在大量的并行處理來update目標表的計數(shù)器表時會很難擴展。如果可以SHOWTABLESTATUS語句來獲取該信息。

InnoDb以相同的方式處理SELECTCOUNT(*)和SELECTCOUNT(1),并沒有性能上的差距。

對于MyIsam引擎,COUNT(*)在沒有WHERE子句的情況下是非常快的,因為在MyIsam引擎中,表的精確行數(shù)會被保存下來。如果MyIsam表的第一列被設(shè)置為非空,那么COUNT(1)具有同樣的優(yōu)化效果(在對于100w條含有非空的簡單數(shù)據(jù)進行COUNT(*)與COUNT(1)的對比測試沒有明顯發(fā)現(xiàn)性能差異)。

COUNT的規(guī)范

COUNT(*)與COUNT(常量)都是查找表中記錄的行數(shù),可以包含NULL數(shù)據(jù);COUNT(列名)是查找表中該列非空的函數(shù)。

對于COUNT(*)相比COUNT(常量)而言,COUNT(*)是SQL92中定義的標準統(tǒng)計行數(shù)的語法,所以許多數(shù)據(jù)庫對其進行優(yōu)化,對于MySQL而言,COUNT(常量)也是轉(zhuǎn)換為COUNT(*)執(zhí)行的,標準語法優(yōu)先使用COUNT(*),因為各個數(shù)據(jù)庫查詢優(yōu)化器的優(yōu)化策略肯定是從COUNT(*)開始的,阿里的SQL開發(fā)規(guī)范中也明確寫明要使用COUNT(*)。

關(guān)于MySQL中COUNT如何使用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享文章:MySQL中COUNT如何使用-創(chuàng)新互聯(lián)
本文地址:http://bm7419.com/article24/dgddje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站制作企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計微信公眾號、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化