网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月15日漏签0天
mysql吧 关注:58,410贴子:135,566
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 10回复贴,共1页
<<返回mysql吧
>0< 加载中...

mysql百万数据分页查询4秒,求教怎么优化

  • 只看楼主
  • 收藏

  • 回复
  • 波罗小号
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
mysql百万数据分页查询4秒,求教怎么优化


  • 波罗小号
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
表结构:CREATE TABLE `zz_account_log` (
`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`mid` int(10) NOT NULL COMMENT '会员ID',
`username` varchar(60) NOT NULL DEFAULT '' COMMENT '用户名',
`pay_points` int(10) NOT NULL DEFAULT '0' COMMENT '支付积分',
`rank_points` int(10) NOT NULL DEFAULT '0' COMMENT '等级积分',
`db_points` int(10) DEFAULT '0' COMMENT '夺宝币',
`user_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '可用金额',
`frozen_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '冻结金额',
`give_money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '充值赠送',
`stage` varchar(10) NOT NULL COMMENT '操作阶段',
`desc` varchar(255) NOT NULL,
`logtime` int(10) NOT NULL COMMENT '操作时间',
`pay_points_total` int(10) DEFAULT NULL,
`rank_points_total` int(10) DEFAULT NULL,
`db_points_total` int(10) DEFAULT NULL,
`user_money_total` decimal(10,2) DEFAULT NULL,
`frozen_money_total` decimal(10,2) DEFAULT NULL,
`amount` decimal(10,2) DEFAULT '0.00' COMMENT '第三方支付金额',
PRIMARY KEY (`id`),
KEY `id` (`id`) USING BTREE,
KEY `mid` (`mid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=189179 DEFAULT CHARSET=utf8;


2025-11-15 05:25:49
广告
不感兴趣
开通SVIP免广告
  • sieger2001
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
把sql、explain的结果也发出来


  • 波罗小号
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
sql语句发布出来,一发就自动删除


  • 波罗小号
  • 初涉江湖
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • sieger2001
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
因为你使用了SQL_CALC_FOUND_ROWS ,使用这个必须要扫描全部数据,你之所以慢,就是因为全表扫描导致的


  • sieger2001
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你可以试试下面这种写法
select a.id,a.username,a.amount,a.user_money,a.frozen_money,a.db_points,a.pay_points,a.stage, a.logtime,a.desc,a.rank_points
from zz_account_log a
inner join (select a.主键 FROM zz_account_log ) b
on a.主键=b.主键
order by a.id desc limit 100000,10
这种写法要求表里要有主键或者唯一索引。
此外,如果对数据分页精度允许有一定的误差的话,也可以换这种写法
select a.id,a.username,a.amount,a.user_money,a.frozen_money,a.db_points,a.pay_points,a.stage, a.logtime,a.desc,a.rank_points
from zz_account_log a
where 主键>= 偏移量
order by a.id desc limit 10
这个偏移量可以靠计算得知,但是这里没办法很准确的获取到这个值


  • sieger2001
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
晕,被删帖了
百度真tm坑,方法是有的
你的数据量不算很大,可以用inner join的方法改写,也可以通过主键>偏移量的方法改写,不过这种写法里,偏移量并不能很好的估算出来
两种写法私信你了,你可以试试


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 10回复贴,共1页
<<返回mysql吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示