【每日一问】面试官:如何对数据库进行优化?

【每日一问】如何实现数据库的优化?

要解决数据库的优化问题,可以从表结构优化、sql优化和索引优化三个方面考虑

一、表结构优化
  • 首先,在业务场景合适的情况下,我们可以尽量更小的数据类型存储数据。
  • 为了减少连表查询,我们还可以适当添加冗余字段。
  • 也可以在表的一些字段上建立索引,优先考虑where、order by、group by使用到的字段。但是要考虑到索引失效的问题。还有就是建立的索引不宜过多,过多的索引反而会减低sql的查询效率
二、sql优化
  • 尽量避免使用select *,避免出现全表扫描的情况,毕竟查询到不需要的字段,也是一种资源浪费。
  • 多表联查的时候,遵循小表在前,大表在后的原则。
  • 查询的时候,我们尽量把数据量小的字段放在前面,提高查询效率。
  • 当数据量大时,避免使用where 1=1的条件,避免全表扫描,可以使用动态sql进行优化。
  • 当我们进行连表查询的时候,可以使用表的别名,并把表的别名放在字段的前缀上,这样就可以减少sql解析的时间。
  • 尽量避免出现全表扫描的情况,比如使用了in/not in,or,或者对字段进行is null判断,模糊查询两边都用%括起来,例如'%小%',就尽量不要使用。
  • 查询使用到了索引的时候,就要检查sql是否会命中索引,避免索引的失效。
三、索引优化

索引优化问题其实就相当于如何避免索引的失效问题

  • 尽量避免在字段开头模糊查询,比如%A会导致数据库引擎放弃索引进行全表扫描。如果需要一定要在前面使用模糊查询,我们可以使用MySQL的内置函数INSTR(str,substr)来进行模糊匹配。
  • 尽量避免使用in/not in,这样会导致走全表扫描。针对连续的值,我们可以使用between来代替;如果是子查询,那么可以使用exists来代替。
  • 尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描。可以使用union来代替or.
  • 尽量避免对字段进行is null判断,会导致数据库引擎放弃索引进行全表扫描。 可以给字段添加默认值0,对0值进行判断。
  • 尽量避免在索引列中运算
  • 查询条件不能用 !=
  • 不要再索引列上进行任何操作,比如计算,函数操作等
  • 字符串类型一定要加上引号,因为mysql数据库存在隐式转换。强制改变原有类型会导致查询不走索引。

大概从这些方面去回答,就可以直面面试官的“严刑拷打”喽~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Steph Wae

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值