知(zhi)方可補不(bu)足~SQL中的count命(ming)令的一些(xie)優化(hua)措施(百萬以(yi)上數(shu)據明顯(xian))
SQL中對于求表記(ji)錄總數的有count這個聚合命(ming)令(ling),這個命(ming)令(ling)給我們感(gan)覺就(jiu)是快(kuai)(kuai),比一(yi)般的查詢要快(kuai)(kuai),但是,當你(ni)的數據表記(ji)錄比較(jiao)多(duo)時(shi),如百萬條,千(qian)萬條時(shi),對于count來說(shuo),就(jiu)不是那么快(kuai)(kuai)了,我們需要掌(zhang)握(wo)一(yi)些技巧(qiao),來優化這個count。
有人說:
select count(1) from table
select count(primarykey) from table
比較快,一定不要用
select count(*) from table
可我(wo)要說的(de)(de)是(shi),count(*)更快一些,為什么呢(ni),count(*)是(shi)什么意思(si)?事實上,它真正的(de)(de)含(han)義是(shi)找(zhao)一個占(zhan)用空間最小的(de)(de)索(suo)引字段,然后對它進行記數(shu),不要一看到*就(jiu)認為“大”,在count命令中,它指的(de)(de)是(shi)“任意一個“。
對于一(yi)個(ge)大表來(lai)說,如(ru)果(guo)你(ni)的字(zi)段有bit類(lei)型,如(ru)性(xing)別字(zi)段,表示真假關系的字(zi)段,我(wo)們需(xu)要為它(ta)加上索引,加上之后(hou),我(wo)們的count速度就提(ti)交幾十倍(bei),真的,呵呵
首(shou)先為我們的bit類型字(zi)段加(jia)索引IsSync添加(jia)聚集索引
如(ru)果(guo)數據表太大,我們需要在命令行(xing)中去運行(xing)
之后(hou),再去運(yun)行(xing)count命(ming)令,呵呵
SET STATISTICS IO ON --查看IO開銷 SET STATISTICS PROFILE ON --查看(kan)分析、編譯(yi)和執行查詢所(suo)需(xu)的時間 SET STATISTICS TIME ON --查看語句(ju)運行的時(shi)間 SELECT COUNT(*) FROM dbo.C_User_Info
結果比(bi)沒有建立索引(yin)時快了10多倍!