Mysql学习记录

1、Mysql中ACID的原理一系列问题

https://www.cnblogs.com/CuiHongYu/p/10845354.html



2、用limit进行分页会影响性能

http://www.cleey.com/blog/single/id/793.html



3、索引结构

在这里插入图片描述

为什么Mysql用B+树当索引,而不用B树或红黑树?

B+树优点


4、索引失效的情况

  • 违背了最左前缀法则时,索引失效

  • 符合最左前缀法则,但中间出现跳跃某一列,则只有跳跃的列前符合法则的索引生效:
    例: 设置索引为 a,b,c

    select * fromwhere a = '' and c = '';
    

    此时索引生效范围仅为a

  • 符合最左前缀法则,但使用了范围查询,则范围查询之后的列索引失效

    select * fromwhere a = '' and b < '' and c = '';
    

    此时索引生效范围为a,b

  • 不要在索引列上进行运算操作,索引将失效
    比如substring等运算操作

  • 查询的列为字符串,没有加单引号时,索引失效
    由于在查询时没有对字符串加单引号,MySQL的查询优化器,会自动的进行类型转换,造成索引失效。

  • 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到

    select * fromwhere a = '' or d = '';
    

    由于d列没有建立索引,即使a建立了索引,用or连接以后a的索引也会失效

  • 以%开头的Like模糊查询,索引失效
    如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效

    select * fromwhere a = '%xxxx%';
    

    此时a的索引将会失效

    解决方法:使用覆盖索引即select 只选择已经建立索引的列

    select a,b,c fromwhere a = '%xxxx%';
    

    这种情况下索引有效

  • 如果MySQL评估使用索引比全表更慢,则不使用索引

  • 使用is NULL , is NOT NULL 有时索引失效

  • 使用 in 时会走索引, 使用 not in 时索引失效
    In 和 not in 是用来判断表达式的值是否位于给出的列表中

    select * fromwhere a  (not) in(value,value);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值