• 网站优化之mysql优化


    一,网站优化之mysql优化;
    1、前缀索引,可以通过前缀去识别唯一性,把这个前缀作为索引内容,可以节省存储索引的空间,从而提高索引的查询速度。distinct 排重操作
    2,2、in条件索引使用
    同时查询出id为1,3,6
    select * from where id =1;
    select * from where id =3;
    select * from where id =6;
    select * from where id in(1,3,6); //in条件可以使用到索引
    3,全文索引
    文本字段才能够建立全文索引
    char varchar text
    把字段内容里的所有文字,进行分词处理,给分词建立索引,为了解决模糊查询除了左固定。
    3.1 增加全文索引
    mysql > alter table articles add fulltext key (title);
    mysql > alter table articles add fulltext key (body);
    使用全文索引的语法结构
    match (字段)against(值)
    3.2 复合全文索引
    mysql > alter table articles add fulltext key (title,body);
    复合索引 字段同时出现,复合索引可用,字段单独出现,复合索引不可用
    3.4 全文索引注意
    ①文本字段类型 char varchar text mysql5.6以下 myisam支持
    ②建立分词索引 不太好用 不符合业务使用需求
    ③不支持中文
    ④一般会使用其他所有全文索引、搜索技术代替mysql全文索引
    php+sphinx java+lucene
    4,分页优化
    分页显示处理的原理,是使用mysql数据表查询sql语句limit(skip,length)语法
    5、索引结构的类型(了解)
    ①非聚合型 非聚集型索引 数据文件和索引文件是分离开的 myisam
    ②聚合型 聚集型索引 数据文件和索引文件存储在一起额 innodb
    二、缓存设置
    mysql数据库的缓存,是针对sql语句的查询结果进行存储,如果再次查询此sql语句,将会把缓存到的结果返回,不需要再次遍历数据表,也达到了数据查询提高速度的效果。
    ①删除emp表的主键索引
    为了能够查看出效果,选择删除之前的emp表中增加的empno字段的索引
    mysql > alter table emp drop primary key;
    ②开启数据缓存操作
    mysql >show variables like 'query_cache%';
    mysql > set global query_cache_size=64*1024*1024;
    2、缓存失效
    缓存会出现失效的情况,缓存如果失效,那么查询速度就会变慢。
    ①数据结构发生改变 写操作
    3、使用不到缓存的情况
    当sql语句中存在变量信息。
    ①时间变量 now
    ②随机数 rand
    4、生成多个缓存
    虽然查询结果一致,但是不注意sql语句规范,会生成多个缓存,但是数据结果是一样的。
    ①大小写
    ②空格
    6、缓存其他操作
    ①查看缓存状态
    mysql > show status like 'Qcache%';
    ②重置缓存空间
    mysql > reset query cache;
    三、分表设计
    一般情况下,数据量在百万级别或者千万级别以内,使用索引技术和缓存技术,就可以得到较好的性能。如果数据量有急速递增的趋势,突破亿级别。可以选择使用分表技术,来进行数据表分表操作,从而提高数据表的活性,查询速度变快。
    1、分区表类型区别
    分片
    ①逻辑分区 表 真实表还是同一个,逻辑是多个,实际还是同一个 原来单表的sql使用不受到影响
    ②物理分表 多个真实存在分表 sql语句需要确定操作哪个分表
    2、四种格式的逻辑分表
    逻辑分区的条件,必须是主键或者主键的一部分(联合主键)
    ①key/hash分表 求余方式 和业务联系不紧密的
    语法:
    key方式分区
    create(
    字段 类型
    ……
    )
    partition by key (字段) partitions 分区数目;
    hash求余:
    create(
    字段 类型
    ……
    )
    partition by hash(字段) partitions 分区数目;
    ②range/list 分表 条件方式 和业务联系紧密的
    语法:
    Range条件:
    create(
    字段 类型
    ……
    )
    partition by range(字段/表达式) (
    partition 名称1 values less than (常量),
    partition 名称2 values less than (常量),
    partition 名称3 values less than (常量),
    );
    List条件:
    create(
    字段 类型
    ……
    )
    partition by list(字段/表达式) (
    partition 名称1 values in (列表1),
    partition 名称2 values in (列表2),
    partition 名称3 values in (列表3),
    );
    3、分表管理
    对于分区进行后期的管理操作
    3.1key/hash分表管理
    增加:alter table 表名 add partition partitions 5;
    减少:alter table 表名 coalesce partition 12;
    以上情况不会影响原有数据,数据需要根据新的分区重新分配
    3.2range/list分表管理
    语法:
    增加:
    alter table 表名 add partition(
    partition 名称 values less than (常量)

    partition 名称 in (n,n,n)
    );
    减少:
    alter table 表名 drop partition 分区名称;
    删除分区,分区内部数据要丢失。
    4、物理分表设计
    数据表真实存在多个,sql语句查询时,需要提前确定操作哪个表
    ①水平分表
    ②垂直分表
    4.1水平分表
    数据表,进行横向切割,数据字段是完整的,数量的条数会被切分为到多个表中。
    4.2垂直分表
    垂直分表 是进行数据表的竖向切割,数据不是之前完整的一行数据。是把数据的多个字段,分配多个分表中。
    把常用字段分为一个表,另外增加一个附表、拓展表。
    平常使用多的字段的主表,如果需要获取一些不太常用信息,和附表进行连表操作查询
    四、慢查询日志设置
    慢查询:指sql语句执行的时间操作约定的值一个查询,被认为是‘慢查询’。
    在线上运营环境,会开启慢查询日志,进行记录执行效率低的sql语句。之后,针对这些效率低的sql,进行对应的优化操作。
    ①慢查询日志的开启、日志位置
    mysql > show variables like 'slow_query%';
    mysql > set global slow_query_log = 1;
    ②快慢时间临界点
    mysql > show variables like 'long_query_time';
    ③设置时间临界点
    mysql > set long_query_time = 2;

  • 相关阅读:
    iOS MJRefresh的使用 (列表上拉加载更多)
    iOS 后台任务
    ios Alamofire网络插件的使用
    springboot shiro ehcache redis 简单使用
    android BottomNavigationView 简单使用
    iOS ksyhttpcache音视频缓存
    springboot 简单使用shiro登录
    springboot 使用 mybatis + mapper
    [LeetCode] Permutations
    【经典算法】回溯算法
  • 原文地址:https://www.cnblogs.com/songyanan/p/7499714.html
Copyright © 2020-2023  润新知