zoukankan      html  css  js  c++  java
  • 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查看缓存表已经缓存的信息

  • 相关阅读:
    【生活没有希望】poj1273网络流大水题
    SPOJ FASTFLOW网络流水题
    【生活没有希望】hdu1166敌兵布阵 线段树
    【生活没有希望】NOIP2010初赛 烽火传递 smartoj1475
    【填坑向】bzoj2038小Z的袜子 莫队
    (RMQ版)LCA注意要点
    【填坑向】spoj COT/bzoj2588 Count on a tree
    bzoj4364: [IOI2014]wall砖墙
    【听说是线段树】bzoj1012 [JSOI2008]最大数maxnumber
    bzoj4196 [Noi2015]软件包管理器 树链剖分+线段树
  • 原文地址:https://www.cnblogs.com/lollong/p/11532691.html
Copyright © 2011-2022 走看看