MySQL优化查询相关

【查询优化相关】

1.如何定位相关慢的查询:

   a.可以开启慢查询日志,也可以使用show profiles 去记录相关查询到一个临时表再分析。  

   b.show processlist  看看有没有大量等待的进程之类的。

   c. desc 或者 explain 详细看一下某条sql的索引使用情况,影响行数等。

2.如何进行优化:

  a.查询时,用对索引,减少大量无用的行数扫描。 以及所查即所需,尽量不要使用select * ,制定好使用的列,避免大量冗余数据扫描。以及大量重复查询,在应用层做一下缓存。

 b.分解部分复杂的查询变成相关少量的多条, 可以提高缓存效率,单挑查询减少锁的竞争等。

 c. 特定类型相关优化,尽量不用子查询,用关联或者拆分代替,count(*),加*号会不扫描列,只扫描行。

【具体索引优化】

1.insert多次插入的时候选择批量插入。

2.%开头的Like无法使用索引。

3.数据类型隐式转换无法使用索引。int 转 string 这种

4.如果mysql使用索引时比全表扫描慢则不使用索引,扫描行数超过30%一般就会不用索引了。(也是避免了频繁的普通索引和聚集索引的切换)

5.大的文本或超长字段不要建索引。

6.垂直分表,水平分表相关,这时候一般可以考虑人为生成主键id,单要维持顺序。

【聚集索引和其他索引】

1.Mysql 主键索引和其他 索引的区别:

a. 主键索引天生唯一,而且不能有null值,唯一索引虽然也唯一,但是可以为null。

b.主键索引属于聚集索引,存储结构中存了主键索引的id以及行记录(B+树的叶子节点,叶子节点也就是没有子节点的节点。),而其他索引的存储结构中,存的是索引内容以及主键聚集索引的值,查的时候通过索引再结合主键索引指向的位置获取数据。

c.(再顺带说一下为什么主键一般自增,因为自增的话就不用去改变节点的结构,只需要在最后追加就行,不然就要不断调整数据的物理地址分页等,加大io损耗)。

猜你喜欢

转载自www.cnblogs.com/camouflage/p/11111075.html
今日推荐