zoukankan      html  css  js  c++  java
  • mysql 杂识

    1. mysql慢查询记录中除了记录超过long_query_time 时间的sql,还记录没有使用索引的查询,可以使用参数log_queries_not_using_index 设置开闭

    2. timestamp 占4个字节,可表示时间范围少,自带时区

    3. int(1) 和 int(11) 区别: 都是int ,占64个字节,1和11 表示的是显示长度,设置zerofill 可以看到左侧补0 ,即11 表示的是当位数不足时在

    左侧加0补足位数. 

    4. varchar 可变长度,需要额外一到两个(0-255或大于255)字节存储字符串长度,比char 多占用空间。

    5. to_days() 返回从0到该日期的天数 

    6. 前缀索引 alter table tb add key(city(7))

    7. 覆盖索引: 包含所有查询需要的索引称为覆盖索引。含查询条件和查询结果列。 如: 

      select uid from tb where cc='x' 有一个组合索引(cc,uid), 则此查询可以利用该索引直接返回,

      而不必再获取索引后去查询主键索引对应的数据,使用explain 结果中extra列为using index 表示

      使用了覆盖索引

    8. mysql 间隙锁: 间隙锁会锁定辅助索引(又称二级索引,即非主键聚集索引以外的索引)两个叶子节点之间多余区域,如有数据a1 ,a3,a5,对应数据列

    有二级索引。此时对a3 做删除操作等,会对a1和a3 ,a3 和a5 之间区域加锁,此时如果想插入a2 或a4 则需要上一步删除操作完成提交。 所以间隙锁会

    影响插入性能。

    9. mysql explain 结果中的type=index 说明使用了索引来做排序 

    10. pt-duplicate-key-checker工具 可以检查mysql 重复索引

    11. mysql limit 偏移量很大时,如select * from tb limit 10000,10 , 由于要查询* 所有列,此时mysql 会在索引后获取id,再去关联主键索引获取其他数据列,

    很慢。可以使用延迟关联提高效率。select * from tb inner join (select id from tb where limit 10000,10) t using id .

    12. mysql 即使有索引,也不一定使用,可参考统计值cardinality  .(通过 show index from tb 获取)

    13. mysql 可以用on duplicate key update 解决有更新无插入的并发问题,判断依据是语句中的索引。如:

    insert into tb(id,name) values(3,'aa') on duplicate key update name='aa'

    14. mysql update 能确定走索引的时候加行锁,否则表锁,所以对于一个长事务中的update 语句要注意可能锁表,导致其他操作超时。

  • 相关阅读:
    hudson中 ANT 编译警告: 编码 UTF-8 的不可映射字符解决方法
    Jmeter与hudson,ant集成
    Hudson配置路径
    python 面向对象:封装---对象的属性可以是另一个类创建的对象
    python 面向对象:封装
    python3 f-string格式化字符串的高级用法
    iOS微信支付无法直接返回APP的问题
    学习git&github
    Appium之xpath定位详解
    selenium等待方式详解
  • 原文地址:https://www.cnblogs.com/zhangchenglzhao/p/12620359.html
Copyright © 2011-2022 走看看