`

记公司DBA的一次MySQL分享提炼

阅读更多
  • 1.关于MySQL锁行锁表问题:在修改表时, MySQL会根where据条件去确定锁哪些数据.如果where条件有索引, 则会去扫描索引确定出有哪些数据需要锁住.(联合索引比单索引能过滤更多数据, 锁更少数据)
  • .
  • 2.如果where条件中有多个索引, 则只会选择其中最近where的单索引或联合索引-最左匹配(经验:用or来筛选数据效率 小于 用union把or两边的条件分别放到不同语句中效率)
  • 比如: select * from table where a=1 or b=2. 如果a, b 都有索引, 只会用到a的索引.用下面的写法则a, b的索引都会用到: select * from table where a=1 union select * from table where b=2.
    .
  • 3.间隙锁:见下图
  • .

    比如说这张表, 注意id主键...没有id=5这条数据, 如果这是用这条SQL:delete from table where id=5; 由于并没有id=5这条数据, 于是会采用间隙锁, 锁住id=5相邻的一个范围.即把id(4-6)锁住
    .
  • 4.rand()很耗性能, 可以在程序中获取随机数再传入SQL
  • .
  • 5.索引尽量使用长度小字段类型, 数字类型字段(有利于数据检索和索引更新/检索)
  • 大小: 2.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics