数据库 标签

sql优化常见策略 有更新!

  |   0 评论   |   0 浏览

常见的优化策略
从最核心的开始说起

1. 选择正确的存储引擎

这个是最核心的了,选错存储引擎那其他的都是白忙活了。那最常用的就是InnoDB了,那如果事务性要求不高的话,可以选择myisam了。

2. 不能用存在null值的列做索引

不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。

3. where后面的索引不一定100%有效

任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。

利用redis实现分布式锁

  |   0 评论   |   0 浏览

利用redis来实现分布式锁。一般就用setnx和getset两个命令。

  • NXNot eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists.
  • getset是同步的

java之jedis实现
expireMsecs 锁持有超时,防止线程在入锁以后,无限的执行下去,让锁无法释放
timeoutMsecs 锁等待超时,防止线程饥饿,永远没有入锁执行代码的机会

数据库索引-复制-事务详谈 有更新!

  |   0 评论   |   0 浏览

加一条:

并不是在所有查询条件下出现的列都需要添加索引,访问表中很少一部分行时,使用b+树才有意义.对于像性别,地区,类型字段,没必要加.因为可取值范围很小,会取出数据库中大部分数据.查询优化器不会使用索引.如果某个字段取值范围广,几乎没有重复.使用B+树索引是最合适的.当取出的数据占表中大部分数据时,查询优化器不会使用B+树索引.根据专家的研究,当取出的数据量超过表中数据量的20%时,优化器不会使用索引.而是进行全表扫描.

误区改正

B+树索引并不能找到一个给定键值的具体行,而是被查找数据所在的页.然后数据库通过把页读入内存,再在内存中进行查找得到数据!!这个我以前也不知道啊.这样感觉靠谱多了