问题:网站一直被人刷,导致mysql/ target=_blank class=infotextkey>mysql数据库异常发生too many open connections 。
引发此问题的sql语句:
SELECT a.uid, a.veil, a.content, a.datetimes, a.audit, b.user_name, b.uc_id
FROM news_talkabout a
LEFT JOIN users_info b ON a.uid = b.id
WHERE infoid =11087
ORDER BY a.id DESC
LIMIT 451350 , 30
放在phpmyadmin里执行一下,是很慢。
SELECT a.uid, a.veil, a.content, a.datetimes, a.audit, b.user_name, b.uc_id
FROM news_talkabout a
LEFT JOIN users_info b ON a.uid = b.id
WHERE infoid =11087
ORDER BY a.id DESC
LIMIT 0 , 30
第一页会很快
PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”EfficientPagination Using MySQL“的报告
limit10000,20的意思扫描满足条件的10020行,扔掉前面的10000行,返回最后的20行,问题就在这里。
LIMIT 451350 , 30 扫描了45万多行,怪不得慢的数据库都堵死了。
但是
limit 30 这样的语句仅仅扫描30行。
那么如果我们之前记录了最大ID,就可以在这里做文章
举个例子
日常分页SQL语句
select id,name,content from users order by id asc limit 100000,20
扫描100020行
如果记录了上次的最大ID
select id,name,content from users where id>100073 order by id asc limit 20
扫描20行。
您可能感兴趣的文章:
mysql limit用法及优化详解
学习MySQL数据分页查询(limit用法)
mysql查询优化之limit和count的优化
mysql优化之LIMIT,OFFSET分页
优化mysql的limit offset的例子
学习mysql中的limit分页优化
mysql的limit offset,n的奥秘
相关阅读:
MySQL海量数据的通用存储过程分页代码
实例详解mysql limit大数据量分页优化的方法