mysql优化sql查询语句_从500万条数据中查询,求优化一条SQL语句

表结构如下,里面有500W数据。我没有权限修改这个表,所以请大家给我优化下SQL查询

CREATE TABLE IF NOT EXISTS `jdp_tb_trade` (

`tid` bigint(20) NOT NULL,

`status` varchar(64) DEFAULT NULL,

`type` varchar(64) DEFAULT NULL,

`seller_nick` varchar(32) DEFAULT NULL,

`buyer_nick` varchar(32) DEFAULT NULL,

`created` datetime DEFAULT NULL,

`modified` datetime DEFAULT NULL,

`jdp_hashcode` varchar(128) DEFAULT NULL,

`jdp_response` mediumtext,

`jdp_created` datetime DEFAULT NULL,

`jdp_modified` datetime DEFAULT NULL,

PRIMARY KEY (`tid`),

KEY `ind_jdp_tb_trade_seller_nick_jdp_modified` (`seller_nick`,`jdp_modified`),

KEY `ind_jdp_tb_trade_jdp_modified` (`jdp_modified`),

KEY `ind_jdp_tb_trade_seller_nick_modified` (`seller_nick`,`modified`),

KEY `ind_jdp_tb_trade_modified` (`modified`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

符合以下条件的有3W条数据

SELECT COUNT(*) AS tp_count FROM `jdp_tb_trade` WHERE ( `seller_nick` IN ('李心','zhixian50','陈鹏','雪儿','稀饭','婷婷','七七') ) AND ( (`jdp_modified` > '2007-11-30 09:52:39') AND (`jdp_modified` <= '2014-04-21 22:31:13') ) LIMIT 1

我要分页查询出这3W条数据,由于MYSQL分页越往后查询越慢,所以我用了关联查询。该查询在前面2页需要3到4分钟才能返回结果。后面的每页4秒左右就返回了。实在搞不明白为什么。麻烦大家帮忙优化下。每页必须要在10秒内完成。

SELECT t1.jdp_modified,t1.jdp_response FROM jdp_tb_trade t1, ( SELECT `tid` FROM `jdp_tb_trade` WHERE ( `seller_nick` IN ('李心','zhixian50','陈鹏','雪儿','稀饭','婷婷','七七') ) AND ( (`jdp_modified` > '2007-11-30 09:52:39') AND (`jdp_modified` <= '2014-04-21 22:31:13') ) ORDER BY jdp_modified desc LIMIT 0,200 ) t2 WHERE t1.tid=t2.tid

问题补充:慢的原因主要在in上面,目前我将in用UNION ALL代替,能基本达到要求。各位还有什么好方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值