谈谈自己对sql优化的理解

sql优化的见解

  1. 合理的使用缓存来减少对数据库的查询。如利用mybatis的一级缓存,来减少相同sql的查询。
  2. 不使用select * from 得查询,加大数据库的压力,使用什么字段,返回什么字段。
  3. 避免使用not in 或 <> 不等于的查询,因为会查询全表。
  4. 我们自己写的sql很清楚知道,返回的数据有多少。当我们只需要有一个结果返回时,利用limit 1.查出1条后面的就不在查了。减少与数据库的交互。
  5. 对于我们经常能够查询的字段(列)或经常与其他表做条件的列,添加索引。(组合索引和单列索引)。
  6. 避免使用模糊查询like,‘%数据%’的查询,就算改查询列有索引,索引会失效,而‘数据%’不会使索引失效。
  7. 将查询条件更加精确化,提高了查询的速率。
  8. in操作的原理是先进性子查询操作,再进行主查询操作(适合主查询是大表,子查询是小表)。
    exists操作的原理是先进行主查询操作,再到子查询中进行过滤(适合主查询是小表,子查询是大表)。
  9. Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度舍得尽可能小。
    例如:在定义邮政编码这个字段时,如果将其设置为char(255),显然给数据库增加了不必要的空间,甚至使用varchar这种类型也是多余的,因为char(6)就可以很好地完成了任务。同样的如果可以的话,我们应该是用MEDIUMINT而不是BIGINT来定义整形字段。
  10. 在可能的情况下,尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。对于某些文本字段来说,例如“省份”或者“性别”,我们可以将他们定义为ENUM(枚举)类型。因为在MySQL中,ENUM类型被当做数值型数据来处理,而数值型数据被处理起来的速度要比文本类型要快得多。这样我们又可以提高数据库的性能。

索引是建的越多越好吗?

答案自然是否定的
数据量小的表不需要建立索引,建立会增加额外的索引开销
不经常引用的列不要建立索引,因为不常用,即使建立了索引也没有多大意义
经常频繁更新的列不要建立索引,因为肯定会影响插入或更新的效率
数据重复且分布平均的字段,因此他建立索引就没有太大的效果(例如性别字段,只有男女,不适合建立索引)
数据变更需要维护索引,意味着索引越多维护成本越高。
更多的索引也需要更多的存储空间

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值