mysql中数据优化

一. 分页优化                            

1. 问题:在使用limit做分页的时候,如果是特别多的数据,性能会大大受到影响

使用 limit offset, N 获取分页数据、 当offset非常大时,效率极低

原因是mysql并不是跳过offset行,然后单取N行

而是取offset+N行,然后丢弃前offset行,返回N行

当offset越大,效率较低比如(100000000,10)加上没有索引他会全表查找……


2.解决方案

从业务上实现,直接不让用户查询70页后面的数据(百度,Google就是这么做的)

不使用 offset ,而是使用 where + limit 来实现,因为索引对排序是有帮助的
select id,name from tableName where id>5000000 limit 10;
select id,name from tableName limit 5000000,10;

问题: 2次的结果不一致
原因: 数据被删除过(索引被破坏了找到的数据你说能一样吗)
解决: 数据不进行物理删除(可以逻辑删除)
非要物理删除,还要用offset精确查询,还不限制用户分怎么办?
实现思路:使用索引来实现,索引可速查找,先获取ID,然后再使用ID去查询数据,也叫做

延时关联
select id,name from tableName inner join (select id from tableName limit 5000000,10) as tmp using(id);{

using()这是代表a.cat_id=b.cat_id

}


二. 左前缀的难题

列如url

http://xxxx.com
http://xxxx.cn
http://xxxx.top
对于这样的列,前面的字符不易区分,如何解决?
解决方案一
把 url列反转 之后在存储
例如:将 http://xxxx.top 反转成 pot.www//:ptth 后存储,然后建立索引
解决方案二
使用伪hash处理,增加一列 int(11) unsigned ,使用crc32(url)处理url后再插入到新增加的该列






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值