易超seo公司

温州更专业
seo技术分享公司
当前位置:首页 > seo网站建设

MySQL千万级快速分页优化(市面所有能找到的综合版)

MySql 性能到底能有多高?用了php三年多,真正如此深入的去思考这个问题还是从今天天开始。有过痛苦有过绝望,到现在充满信心
 
以下分享一点我的经验 

一般刚开始学SQL的时候,会这样写 
复制代码代码如下:

SELECT * FROM table ORDER BY id LIMIT 1000, 10; 

但在数据达到百万级的时候,这样写会慢死 
复制代码代码如下:

SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 

也许耗费几十秒 

网上很多优化的方法是这样的 
复制代码代码如下:

SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10; 

是的,速度提升到0.x秒了,看样子还行了 
可是,还不是完美的! 

以下这句才是完美的! 
复制代码代码如下:

SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010; 

比上面那句,还要再快5至10倍 

另外,如果需要查询 id 不是连续的一段,最佳的方法就是先找出 id ,然后用 in 查询 
复制代码代码如下:

SELECT * FROM table WHERE id IN(10000, 100000, 1000000...); 


再分享一点 
查询字段一较长字符串的时候,表设计时要为该字段多加一个字段,如,存储网址的字段 
查询的时候,不要直接查询字符串,效率低下,应该查诡该字串的crc32或md5 

如何优化Mysql千万级快速分页 

Limit 1,111 数据大了确实有些性能上的问题,而通过各种方法给用上where id >= XX,这样用上索引的id号可能速度上快点儿。By:jack 
Mysql limit分页慢的解决办法(Mysql limit 优化,百万至千万条记录实现快速分页) 

代码如下:
$str="select id from ftxia_items where status='underway' and cate_id in (1,2,3,4,5,6,7,8,9) and coupon_price <= 30 and pass =1 and isshow =1 order by id desc limit {$start},{$page_size}";
$itemsid_list=$this->_mod->query($str);    
$strid="";
            //foreach($itemsid_list as $key=>$val){
            //  $strid.=$val['id'].','; 
            //}
$strid=substr($strid,0,strlen($strid)-1); //构造出id字符串 
 
$items_listsql="select * from ftxia_items where id in (".$strid.")";
上面2句sql语句可以综合成
$sql_better="SELECT * FROM ftxia_items a JOIN (select id from ftxia_items where status='underway' and cate_id in (1,2,3,4,5,6,7,8,9) and coupon_price <= 30 and pass =1 and isshow =1 order by id desc limit {$start},{$page_size}) b ON a.ID = b.id";
这样做减少了一次mysql握手交互.
附上个人案例www.jiukuaicun.com正在使用的目前数据只有十五万2500多页 最后一页也是秒开 就是普通的阿里云没有rds什么的
 

评论

尚未注册畅言帐号,请到后台注册