mysql优化

基本优化:在经常使用排序的字段加索引,like查询前面不加%等等,这里就不细说

我们这里主要讨论的是稍微高级一点的查询优化:

1.分页查询

在分页起始页越来越大的时候,查询速度可能会越来越慢

select * from table order by id desc limit 1000000,10

上面的语句是比较经常使用的sql语句,这个语句在数据量不高的时候速度还是可以用的

但是在数据量分页数越来越大速度会非常的慢.这时有一种优化方案:

 
 SELECT * FROM `table` WHERE id>(SELECT id FROM `table` order by id limit 700000-1,1) order by id limit 0,10

这种方案大致可以节省的时间大概是看字段数多少和大小,原理是因为查询是通过id排序,这时我们使用子查询,查询其中我们需要的一个值(注意这里需要先减1才能查询的是我们改造前的数据),然后id大于他的就是我们想要的分页.为什么快呢,因为前面条件是select * 哪怕分页也是会进行查询的,所以先把不需要的查询*替换为id作为标识,这时就节省了一部分资源,速度也相对变快了

2.数据库表的字段类型

  1. ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。

    如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。

  2. 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

    首先,问问你自己“Empty”和“NULL”有多大的区别(如果是INT,那就是0和NULL)?如果你觉得它们之间没有什么区别,那么你就不要使用NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!)

    不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。

3.在合适的时候新增工具表和合适的引擎

比如一个表中的数据很大,在你经常使用某个字段进行排序的时候,可以把id和其他的一些字段提出来放入新表中,然后使用第一个分页查询优化方法,进行查询,如果还慢可以考虑换搜索引擎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值