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 优化,百万至千万条记录实现快速分页) 一般刚开始学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
代码如下:
$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什么的
上面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什么的