mysql的基础优化

一       索引

1.1        Innodb是必须有主键,因为innodb本身就是索引与数据绑在一起的,如果用户不自己指定主键,那么mysql会自己生成一个隐藏字段值作为主键,这个也叫聚集索引

1.2        辅助索引就是除主键索引外的其他字段所生成的索引,而且有个注意点是innodb的辅助索引的子节点存储的是主键值,最终还是通过主键索引找到数据的,没办法,innodb的数据和主键索引是合二为一了

1.3        还有比较重要的一点是表的更新也会伴随这个索引的更新,所以如果索引文件很大的话数据更新操作也会变慢

1.4        前缀索引,顾名思义就是取一个字段开头几个字符作为索引,因为如果一个字段的值太大的话,就会导致索引文件也会变大,而且因为字段很长,所以你想要把一个长字段所有的字符匹配完才行,这必然会降低索引效率,前缀索引只支持英文与数字

1.5        不同sql的索引执行方式

  1.5.1    第一个:select * from user where id=1000;

    1.5.1.1   像上面这种sql明确指定了id的值,那么就会利用索引树找到对应数据

  1.5.2    第二个:select * from user where id>1000;

    1.5.2.1   这种的话也会利用索引树,不过是从1001开始挨个挨个找,如果1001后面的数据还很多,那么其实也无异于全表扫描

  1.5.3    第三个:where id >1 and id <1000000

    1.5.3.1   这种的话就是看你的范围是多大了,范围小还是很快,范围大也就相当于全表扫描

  1.5.4    第四个:select * from user where username like ‘%uu’

    1.5.4.1   像上面这种,就是全表扫描,因为没有指定开头字符,任何字符都有可能,速度当然会很慢。但如果写成’uu%’,那就会快很多,因为那它就会直接取找开头是’uu’的字符了,就会变快一些,不过因为不是精确匹配,所以它需要把所有开头是’uu’的都要扫描一遍(其实就是最佳左前缀原则)

 

二.querCache

  就是对某个查询语句的查询结果进行缓存,如果sql语句相同就直接返回这个缓存,使用 show status LIKE '%qcache%';查看缓存是否开启

  包含不确定参数的sql语句是不会被缓存的比如 like,之类的

 

三.bufferPool

  querCache是对指定sql语句的结果缓存,而bufferPool是对整个表缓存在内存中,所以速度会很快

 

四.skip_name_resolve

  这个是跳过域名解析,因为有时候DNS解析很慢,所以就会导致获取数据库连接很慢进而影响整体性能,注意要开启这个选项要先开启性能模式

  通过show variables like 'performance_schema';查看性能模式是否开启  

  通过select ip,host,host_validated,sum_connect_errors,count_authentication_errors from performance_schema.host_cache查看缓存表已经缓存的信息

posted @ 2019-09-17 11:40  lollong  阅读(141)  评论(0编辑  收藏  举报