仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 861|回复: 7
打印 上一主题 下一主题

[学习教程] 关于sql中count写法的切磋

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这里我们讨论用binlog来实现闪回的方案。我们在查询表中数据的数目时,有人喜好用count(*),有人用count(1),另有些伴侣会用count(主键),但这几种用法那种会更优一些呢?上面在csdn下面看到的一篇文章,摘抄以下:

关于COUNT的写法,大抵有以下几种:
COUNT(*)
COUNT(1)
COUNT(主键)
COUNT(列名)

我仍是写个小例子:
USETEMPDB
GO
IFOBJECT_ID(TB)ISNOTNULLDROPTABLETB
GO
CREATETABLETB(COL1INT,COL2INT,COL3INT,COL4INT)
GO
CREATECLUSTEREDINDEXINX_TB_COL1_COL2ONTB(COL1,COL2)
GO
CREATEINDEXINX_TB_COL3ONTB(COL3)
GO
INSERTINTOTB
SELECTT1.number,T2.number,CASEWHENT1.number%3=0THENNULLELSET1.numberEND,T1.NUMBER+T2.number
FROMMASTER..spt_valuesT1
INNERJOINMASTER..spt_valuesT2ONT1.number=T2.number-1
GO
SELECTCOUNT(*)
FROMTB

SELECTCOUNT(1)
FROMTB

SELECTCOUNT(COL1)
FROMTB

SELECTCOUNT(COL2)
FROMTB

SELECTCOUNT(COL3)
FROMTB

SELECTCOUNT(COL4)
FROMTB

SELECTCOUNT(DISTINCTCOL3)
FROMTB

SELECTCOUNT(1),
COUNT(COL3),
COUNT(DISTINCTCOL3),
COUNT(COL4),
COUNT(DISTINCTCOL4)
FROMTB

本人逐一运转SELECT看实行企图,你会发明前五个的实行企图看起来是一样的,都是走INX_TB_COL3,这是由于体系判别COL3的索引巨细小于COL1+COL2的会萃索引,并且COL3中包括了前五个语句所必要的一切列。

但看到第一步的INDEX_SCAN中,会发明COUNT(*)和COUNT(1)是没有输入工具的,即假输入,只输入前往行数,不输入详细的列。而COUNT(COL1),COUNT(COL2),COUNT(COL3)都有一个OutPutLIST,分离是这三列。这是由于体系要算这三列中有几非NULL的值,而COUNT(*)和COUNT(1)都是有一行算一行,不论是不是NULL。

COUNT(COL4)走的是INX_TB_COL1_COL2,也就是会萃索引扫描了,由于COL3中只包括键列COL1、COL2和值列COL3,以是COUNT(COL4)没法走COL3,只能走会萃索引扫描,也就是全表扫描。

前面的COUNT(DISTINCTCOL3)是为了让你们对照企图的,所谓DISTINCT,就是在输入了COL3再GROUPBY一下再盘算行数。

最初一句是演示COUNT用法,无别的意义。


结论:
COUNT(1)和COUNT(*)是一样的,你能够在内里写任何常量,如COUNT(CSDNDSB),不会输入一列常量,不会往体系内外找一切列名。

COUNT(1)和COUNT(列名)意义分歧,不克不及放在一同对照。独一可对照的情形是列名是单主键表的主键列,即会萃非空单键值索引,这类情形下除非想要强迫走会萃索引扫描,不然COUNT(1)优于COUNT(列名),由于前者同意企图选择最估索引,并且没有列输入。限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 21:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表