mysql高级

1聚集索引与非聚集索引

聚集索引:b+树上面有数据

非聚集索引:b+树上面没有数据,只有引用地址

2.二级索引(非主键构成的索引,叶子节点数据为主键)

回表:以非主键建立索引,会形成非聚集索引,查询该字段,会查询到所涉及的主键,然后根据主键查询b+树。

3覆盖索引:不需要回表(二级索引查到的叶子节点的数据,就是需要的数据)

4联合索引:多个字段一起构成索引

最左前缀原则:会依次按照name,age,id的顺序来构造索引,查询时,必须带上最左字段(a)(a,b),(a,b,c)否则会全表扫描。

联合索引相比单列索引的优点:

        1.减少开销,每次建立索引都会浪费开销

        2.更容易形成覆盖索引

        3.效率更高

5.索引下推

条件:2级索引,范围查询

一次性回表

非索引下推

6.索引的优缺点

 

7. 索引优化

 Explain:用于查询sql的执行计划

索引失效的情况(破坏了索引的有序性)

        1.不符合最左前缀原则。

        2. 索引列上有函数。

        3.范围之后全失效

        4.!= , or ,空值 

        查看possible_key,如果有索引,可以强制使用索引,看行数是否减少了(最主要的是范围查询)

        5.like%写最右 like "a%" ,首字母必须漏出来  ,

                %amy%用覆盖索引还是不行,用elastic search 来代替。

        6.字符串不要忘记双引号

        7.覆盖索引不写*

        8.大范围查询改为多次小范围查询

8. trace工具

9.sql优化

        1.不写select * 

        2.小表驱动大表(实际先查询的小表,减少了查询范围)

        

        3.用连接查询代替子查询,有时有用.(实际上就是先查询小范围的表,然后用小范围的表的条件作为大范围表的索引来进行快速查询。

        4. group by效率变低,可以对group by 字段建立索引

        5.批量插入

        6.使用limit

       

        7.union all 代替union(可以减少重复排查)

        8.join表不要过多,尽量单表查询

        

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值