mysql 大表优化 知乎_合理使用索引进行Mysql查询优化

前面几篇文章比较多地介绍了Hive的查询优化技巧,

今天抽一小篇幅介绍Mysql的查询优化技巧。

索引是Mysql查询优化的王牌!所以今天的内容是如何合理使用索引从而做到Mysql查询优化。

有小伙伴可能会问,现在都2021了,谁还用Mysql?其实不然,在很多初创互联网、或传统大企业的数分环境的确还是基于RDBMS的,所以掌握好Mysql很必要!!!

接下来直接进入正题。

一、什么是索引?

简单说 ,在关系数据库(RDBMS)中,索引是一种单独的、物理的对数据库表中一列或者多列值进行排序的一种存储结构。相当于图书的目录,可以根据目录中的页码快速找到需要的内容。

所以,当查询表有索引且我们的查询 SQL 有正确使用索引时,查询引擎可以根据索引进行快速查找,而不需进行全表扫描。

常规的我们把索引分为单列索引、组合索引:

如,某张表有以下字段:doctor_id、patient_id、hospital_id、pay_ment、date。

单列索引为一个索引只包含单个列,如:以 doctor_id 为索引;

组合索引即一个索引包含多个列,如:以 doctor_id、patient_id 两字段列组合作为索引。

二、如何使用索引?

查询语句要怎么写才能发挥索引的优化效果呢?

基础的,在我们的 where 子句中尽可能直接使用索引所谓切片限制条件!

另外的,一些坑我们要规避(这些坑会使索引无法真正发挥作用):

索引列使用 like 子句进行模糊匹配:like “%aaa%” 不会使用索引,只有like “aaa%”可使用索引

索引列上进行运算:select * from users where YEAR(adddate)<2007 不会使用索引,改成则能使用上索引 select * from users where adddate

当使用到组合索引时,以最左前缀的方式组合才可:如 doctorid、patient_id 两个字段的组合索引,where 条件限制 doctor_id或doctor_id+patient_id均可使用索引,但直接使用patient_id则无法使用索引。

只有以下逻辑判断符才使用索引:,>=,between,in,以及某些时候的 like,其他运算符会使索引无法真正发挥价值。

最后提醒一下,索引是有物理存储的,虽然它能大大提高查询速度,但同时也会降低更新表的速度。所以要合理地创建索引。当然这是DBA的工作了,我们作为分析师最终还是利用好索引的查询优化作用。

好看不忘点赞、收藏。欢迎评论区交流讨论!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值