mysql 大数据量查询总数 方式比较

在某平台拿到了获取了所有股票的日K数据(出于学习目的),共1200w 多条。随手一个 select count(*) 想查下总数发现都需要跑好几分钟才能响应。
于是网上搜了几种统计总数的方式,分别试下,对比下查询效率。

表结构如下

CREATE TABLE `east_dc_dkline` (
  `S_CODE` varchar(10) NOT NULL COMMENT '股票代码',
  `S_NAME` varchar(20) DEFAULT NULL COMMENT '股票名称',
  `DK_DATE` date NOT NULL COMMENT '数据日期',
  `OPENING_PRICE` varchar(20) DEFAULT NULL COMMENT '开盘价',
  `LATSET_PRICE` varchar(20) DEFAULT NULL COMMENT '最新价',
  `TOP_PRICE` varchar(20) DEFAULT NULL COMMENT '最高价',
  `LOWEST_PRICE` varchar(20) DEFAULT NULL COMMENT '最低价',
  `VOLUME` varchar(30) DEFAULT NULL COMMENT '成交额(手)',
  `AMOUNT` varchar(30) DEFAULT NULL COMMENT '成交量',
  `AMPLITUDE` varchar(50) DEFAULT NULL COMMENT '振幅',
  `GAINS` varchar(20) DEFAULT NULL COMMENT '涨幅(百分比)',
  `RISING_PRICE` varchar(10) DEFAULT NULL COMMENT '上涨价格',
  `TURNOVER_RATE` varchar(10) DEFAULT NULL COMMENT '换手率(百分比)',
  PRIMARY KEY (`S_CODE`,`DK_DATE`),
  KEY `idx_date` (`DK_DATE`),
  KEY `idx_name_date` (`S_NAME`,`DK_DATE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

以下每种方法各执行3次,比较平均时间;【总数据条数为 12300489 】

1,SELECT COUNT(*) FROM east_dc_dkline

执行 3 min 9 sec

执行 3 min 44 sec

执行 2 min 56 sec

2,SELECT COUNT(1) FROM east_dc_dkline

执行 2 min 30 sec

执行 2 min 31 sec

执行 2 min 29 sec

3,SELECT COUNT(S_CODE) FROM east_dc_dkline – 统计字段 (非主键,ps:由于是组合主键,我count 了其中的一个字段,EXPLAIN 查看执行计划,发现走的还是 默认的索引(非主键索引))

执行 2 min 31 sec

执行 2 min 31 sec

执行 2 min 32 sec

4,SELECT COUNT(S_CODE) FROM east_dc_dkline FORCE INDEX(PRI) – 统计字段 强制使用主键索引

执行 1 min 49 sec

执行 1 min 52 sec

执行 1 min 21 sec

以上为本地windows 系统内安装的mysql数据库 对几种查询方式的执行时间比较,供参考。

补充:sql 执行前可通过 EXPLAIN 先看下执行计划内的索引使用情况。以及可以直接根据 执行计划内 的 rows 得到大致的表内数据量。

over…

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值