初级 - mysql 的索引相关

梦浪的小虾米
2022-03-27 / 1 评论 / 1,514 阅读 / 正在检测是否收录...

如何查看 sql 的索引使用情况

explain select * from xxx where xxx

索引失效的情况

  1. 索引选择性太差(搜索出来结果/总量> 1/4 )
  2. <>/not in 无法使用索引
  3. is null 会使用索引 is not null 不会使用索引
  4. where 子句跳过左侧索引列,直接查询右侧索引字段(联合索引时,一定要按从左到右的时候,没有按照从左到右的顺序)
  5. 对索引使用计算或者使用函数

--- 未完待续

0

评论 (1)

取消
  1. 头像
    梦浪的小虾米 作者
    Windows 10 · Google Chrome

    行锁、表锁
    乐观锁、悲观锁
    共享锁、排他锁

    读锁(read lock),也叫共享锁(shared lock)
    针对同一份数据,多个读操作可以同时进行而不会互相影响(select)

    写锁(write lock),也叫排他锁(exclusive lock)
    当前操作没完成之前,会阻塞其它读和写操作(update、insert、delete)

    #表锁的读锁和写锁
    lock table tablename read;
    lock table tablename write;

    # 行锁的读锁和写锁
    lock in share mode;
    for update

    索引重新统计
    analyze table tablename

    优化表空间,释放表结构 #会锁表
    optimeize table tablename

    show status # 获取 mysql 运行的数据
    show variables # 获取 mysql 的配置

    一线数据库工程师带你深入理解mysql
    mysql 实战45讲
    mysql 高级架构师视频
    从0开始带你成为mysql实战优化大师
    性能调优-mysql深度剖析-诸葛

    分析器
    优化器
    执行器

    各种隔离级别一览:
    1. 读未提交: 事务直接提交,不会创建视图
    2. 读提交: 会创建视图
    3. 可重复提交:事务启动的时候就会创建视图
    4. 串行化:直接加锁,不会

    查看当前mysql的事务的执行级别:show variables like 'TRANSACTION_isolation'

    读表锁是都只能读不能写,
    写表锁是只有锁表的事务可以写不可以读
    以上,执行锁操作的客户端是无法读取其它表的,

    加了写锁的表,其它客户端无法读写,本客户端也无法读
    加了读锁的表,都可以读,但是都无法写

    300ms

    为了避免查询回表,应尽量使用索引覆盖。例如使用select id from a where name =b

    在 mysql8.0.26 测试可知:一个汉字=3个字母=3个数字

    show status like '%%' 和 show variables like '%%'
    redolog的理解
    https://blog.51cto.com/u_15274085/2918514
    redolog的理解
    https://blog.51cto.com/MageByte/2934214?b=totalstatistic
    几种 mysql log 的总结
    https://www.cnblogs.com/wy123/p/8365234.html
    生产环境下 mysql 的配置
    https://blog.csdn.net/miyatang/article/details/60875194
    mysql char(n) 汉字的说明
    https://www.cnblogs.com/zhuyeshen/p/11642211.html
    mysql 汉字说明
    https://www.cnblogs.com/jelly12345/p/14987259.html
    mysql 为什么不建议使用 null
    https://segmentfault.com/a/1190000039774659

    回复