-- 表结构
CREATE TABLE `order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`payment_order_id` varchar(64) NOT NULL DEFAULT '' COMMENT '',
`mechanism_id` varchar(32) NOT NULL DEFAULT '' COMMENT '',
`merchant_id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`merchant_name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`out_trade_no` varchar(64) NOT NULL DEFAULT '' COMMENT '',
`merchant_rate` int(11) NOT NULL DEFAULT '0' COMMENT '',
`merchant_fee` int(11) NOT NULL DEFAULT '0' COMMENT '',
`amount` bigint(20) NOT NULL DEFAULT '0' COMMENT '',
`payment_channel_name` varchar(255) NOT NULL DEFAULT '' COMMENT '',
`payment_status` int(11) NOT NULL DEFAULT '0' COMMENT '',
`pay_time` timestamp NOT NULL DEFAULT '1970-01-01 08:00:01' COMMENT '',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `payment_order_id` (`payment_order_id`),
UNIQUE KEY `mch_trade_no` (`merchant_id`,`out_trade_no`),
KEY `out_trade_no` (`out_trade_no`),
KEY `creat_time_index` (`create_time`),
KEY `condition` (`create_time`,`mechanism_id`,`payment_status`,`payment_channel_name`),
KEY `pay_time_index` (`pay_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=46318751 COMMENT='订单表';
查询语句
select
sum(od.amount)/100 payAmount,
count(od.id) payCount,
sum(od.merchant_fee)/100 fee
FROM
order as od
where od.`create_time` >= '2019-06-01 00:00:00'
and od.`create_time` <= '2019-06-29 00:00:00'
and od.payment_status = 1
and od.`mechanism_id` = '1234'
and od.`payment_channel_name` like 'ch1%';
cd /tidb-ansible/resources/bin & ./tidb-server -V 查看具体版本;
版本号:v3.0.1
use index 后的 sql 以及 执行计划请提供截图信息;
desc select
sum(od.amount)/100 payAmount,
count(od.id) payCount,
sum(od.merchant_fee)/100 fee
FROM
order as od force index (`condition`)
where od.`create_time` >= '2019-06-01 00:00:00'
and od.`create_time` <= '2019-06-29 00:00:00'
and od.payment_status = 1
and od.`mechanism_id` = '1234'
and od.`payment_channel_name` like 'ch1%';
-- 设置并发
set @@session.tidb_build_stats_concurrency = 8;
set @@session.tidb_distsql_scan_concurrency = 20;
set @@session.tidb_index_serial_scan_concurrency = 2;
-- 执行收集操作
ANALYZE TABLE order;
再次验证 SQL 执行计划和响应时间情况
explain analyze select
sum(od.amount)/100 payAmount,
count(od.id) payCount,
sum(od.merchant_fee)/100 fee
FROM
order as od
where od.`create_time` >= '2019-06-01 00:00:00'
and od.`create_time` <= '2019-06-29 00:00:00'
and od.payment_status = 1
and od.`mechanism_id` = '1234'
and od.`payment_channel_name` like 'ch1%';
explain analyze select
sum(od.amount)/100 payAmount,
count(od.id) payCount,
sum(od.merchant_fee)/100 fee
FROM
order as od
where od.`create_time` >= '2019-06-01 00:00:00'
and od.`create_time` <= '2019-06-29 00:00:00'
and od.payment_status = 1
and od.`mechanism_id` = '1234'
and od.`payment_channel_name` like 'ch1%';
drop index condition on order ;
alter table order add index `condition` (`create_time`,`mechanism_id`,`payment_status`,`payment_channel_name`, `amount`, `merchant_fee` );