大家好,现有一问题真心求教,不慎感激
详细如下
CREATE TABLE `tb_tree` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`t` INT(11) NOT NULL COMMENT 't',
`lt` INT(11) NOT NULL COMMENT 'latency',
`ts` BIGINT(13) NOT NULL COMMENT 'Millisecond timestamp',
`s` VARCHAR(255) NOT NULL COMMENT 's',
`lb` VARCHAR(255) NOT NULL COMMENT 'label name',
`rc` VARCHAR(255) NOT NULL COMMENT 'response code ',
`rm` VARCHAR(2550) NOT NULL COMMENT 'response message',
`tn` VARCHAR(255) NOT NULL COMMENT 'thread name',
`dt` VARCHAR(255) NOT NULL COMMENT 'Content-Type ',
`bc` INT(11) NOT NULL COMMENT 'receiveBytes',
`assertion_name` VARCHAR(255) NULL DEFAULT NULL COMMENT 'raname',
`assertion_failure` VARCHAR(255) NULL DEFAULT NULL COMMENT 'rafailure',
`assertion_failure_message` VARCHAR(255) NULL DEFAULT NULL COMMENT 'assertion message',
`ng` INT(11) NOT NULL COMMENT 'number of active thread in the thread group',
`na` INT(11) NOT NULL COMMENT 'number of active thread in the test case',
`tgname` VARCHAR(255) NULL DEFAULT NULL COMMENT 'thread group name',
`machine_ip` VARCHAR(255) NULL DEFAULT NULL COMMENT 'the agent ip',
`response_data` LONGTEXT NULL COMMENT 'responsedata',
`sent_bytes` INT(11) NULL DEFAULT NULL COMMENT 'sentBytes',
`num_threads` INT(10) NULL DEFAULT NULL,
`ramp_time` INT(10) NULL DEFAULT NULL,
`script_name` VARCHAR(250) NULL DEFAULT NULL,
`url` VARCHAR(250) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `ts` (`ts`),
INDEX `t` (`t`),
INDEX `ts_lb` (`ts`, `lb`)
)
COMMENT='this is results of one test xml data'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
我的查询语句
select avg(t),floor(ts/1000),lb
from tb_tree
where ts<>0
group by floor(ts),lb;通过explain看到
对于类似这种,需要在group by后面使用round,floor等聚合函数的情况下,我始终无法使用到索引,怎样提高查询效率了?另外再请问一下,我在一个存储过程中使用如上的sql语句,将结果保存在另外一张结果表中,因为源数据上亿,会莫名巧妙的出现该存储过程的进程在进过20来分钟后自动消失掉,可能会是什么原因造成的了?
MySQL性能优化
详细如下
CREATE TABLE `tb_tree` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
`t` INT(11) NOT NULL COMMENT 't',
`lt` INT(11) NOT NULL COMMENT 'latency',
`ts` BIGINT(13) NOT NULL COMMENT 'Millisecond timestamp',
`s` VARCHAR(255) NOT NULL COMMENT 's',
`lb` VARCHAR(255) NOT NULL COMMENT 'label name',
`rc` VARCHAR(255) NOT NULL COMMENT 'response code ',
`rm` VARCHAR(2550) NOT NULL COMMENT 'response message',
`tn` VARCHAR(255) NOT NULL COMMENT 'thread name',
`dt` VARCHAR(255) NOT NULL COMMENT 'Content-Type ',
`bc` INT(11) NOT NULL COMMENT 'receiveBytes',
`assertion_name` VARCHAR(255) NULL DEFAULT NULL COMMENT 'raname',
`assertion_failure` VARCHAR(255) NULL DEFAULT NULL COMMENT 'rafailure',
`assertion_failure_message` VARCHAR(255) NULL DEFAULT NULL COMMENT 'assertion message',
`ng` INT(11) NOT NULL COMMENT 'number of active thread in the thread group',
`na` INT(11) NOT NULL COMMENT 'number of active thread in the test case',
`tgname` VARCHAR(255) NULL DEFAULT NULL COMMENT 'thread group name',
`machine_ip` VARCHAR(255) NULL DEFAULT NULL COMMENT 'the agent ip',
`response_data` LONGTEXT NULL COMMENT 'responsedata',
`sent_bytes` INT(11) NULL DEFAULT NULL COMMENT 'sentBytes',
`num_threads` INT(10) NULL DEFAULT NULL,
`ramp_time` INT(10) NULL DEFAULT NULL,
`script_name` VARCHAR(250) NULL DEFAULT NULL,
`url` VARCHAR(250) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `ts` (`ts`),
INDEX `t` (`t`),
INDEX `ts_lb` (`ts`, `lb`)
)
COMMENT='this is results of one test xml data'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
我的查询语句
select avg(t),floor(ts/1000),lb
from tb_tree
where ts<>0
group by floor(ts),lb;通过explain看到
对于类似这种,需要在group by后面使用round,floor等聚合函数的情况下,我始终无法使用到索引,怎样提高查询效率了?另外再请问一下,我在一个存储过程中使用如上的sql语句,将结果保存在另外一张结果表中,因为源数据上亿,会莫名巧妙的出现该存储过程的进程在进过20来分钟后自动消失掉,可能会是什么原因造成的了?
MySQL性能优化
解决方案 »
- alter ignore为啥不起作用
- mysql-front 与 mysql连接问题
- postgresql windows 启动不了......
- 求mysql自增字段,主子表同时保存的解决方法
- 我用.net查询“Select * From chuang_AgentInfo”可以,加个“Where `UserName`='成都' ” 就查不出来,郁闷
- mysql_real_connect中写localhost能连上,但是写我本地的ip就不行了,为什么
- 请问想查询mysql数据库的服务名字,应如何操作?若想查询某个数据库服务内的所有表名,又该如何操作?
- 请教mysql中带多条件的快速检索方法
- 左连接问题,散分20!!!!
- log.dump(有数据)如何导入到mysql中?
- 求sql语句:关于两关联表同时插入信息的sql语句
- 如何根据从表的字段内容更新主表
wait_timeout
这两个参数
不是基于常数的,都是类似于select round(ts/1000), from tb_tree group by round(ts/1000);的语句,主要是为了将时间戳按秒合并分组统计。
用字段保存floor(ts),在此字段上建立索引
不是基于常数的,都是类似于select round(ts/1000), from tb_tree group by round(ts/1000);的语句,主要是为了将时间戳按秒合并分组统计。如果都是 /1000, 那就把 ts/1000 单独再放一个字段。然后创建索引。