网站优化之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;
网站优化之mysql优化的更多相关文章
- 性能优化之MySQL优化(慕课)
MySQL数据库优化 1-1MySQL优化简介 数据库优化的目的 避免出现页面访问错误 由于数据库连接timeout产生5XX错误 由于慢查询造成页面无法加载 由于阻塞造成数据无法提交 增加数据库的稳 ...
- 性能优化之mysql优化——慢查日志的开启方式和存储
-- MySQL优化 -- mysql 慢查日志的开启方式和存储 -- 1) 查看mysql是否开启慢查询日志 SHOW VARIABLES LIKE 'slow_query_log'; -- 2) ...
- 慕课网 性能优化之MySQL优化--- max 和count的性能优化
注:在执行SQL语句前加上explain可以查看MySQL的执行计划 数据库:MySQL官方提供的sakila数据库 Max优化: 例如:查询最后支付时间 explain select max(pay ...
- 数据库优化之mysql【转】
1. 优化流程图 mysql优化(主要增加数据库的select查询,让查询速度更快) 2. 优化mysql的方面 主要从以下四个方面去优化mysql ①存储层:如何选择一个数据库引擎,选择合适的字段列 ...
- [数据库系列之MySQL]Mysql优化笔记
大型网站提速之MySql优化 数据库优化包括的方面 数据库优化是一个综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库提高很多. 主要包括: 1.表的设计合理 ...
- Mysql优化之优化工具profiling
程序员的成长之路 2016-11-23 22:42 Mysql优化之优化工具profiling 前言 mysql优化技术: mysql优化不是做一个操作就可以的优化,它包含很多的细节,需要一点一点的优 ...
- MySql优化相关概念的理解笔记
MySQL架构 查询执行流程 查询执行的流程是怎样的: 连接1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求1.2将请求转发到‘连接进/线程模块’1.3调用‘用户模块’来进行授 ...
- mysql优化:慢查询分析、索引配置优化
一.优化概述二.查询与索引优化分析a.性能瓶颈定位show命令慢查询日志explain分析查询profiling分析查询b.索引及查询优化三.配置优化 max_connections back_log ...
- MySQL优化具体
1. 查询与索引优化分析 在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有慢查询日志,profiling分析,EXPLAIN分析查询,以及show命令查询系统状态及系统变量,通过定位分析 ...
随机推荐
- Linux搭建Snmp服务
1:安装snmp yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp 上面的程序首先会校验需要升级的文件 ...
- dubbo-admin管理控制台安装
拉项目切换分支到master git clone https://github.com/apache/dubbo-admin.git /var/tmp/dubbo-admin 打开项目修改配置 dub ...
- Nginx 真实的 IP
配置 Nginx 如果你的 Java 项目使用了 Nginx 代理,那么还需要进行以下配置,才能顺利获取到真实的 IP,否则只能获取到 127.0.0.1. 在 Nginx 的配置文件里,找到你 Ja ...
- 详述 MySQL 中的行级锁、表级锁和页级锁
转自:https://blog.csdn.net/qq_35246620/article/details/69943011 refer:cnblogs.com/f-ck-need-u/p/899547 ...
- php Abstract 抽象类 与 Interface的
一.Abstract Class 与 Interface 的构造 抽象类 Abstract Class <?php abstract class A { abstract public func ...
- 【转】时冲的CSDN:Linux系统各个目录的作用
请各位移步原文链接:时冲的CSDN 以下仅用于个人梳理,排版方便阅读记忆(原文更优): from my typora: 文章目录 Linux文件系统 LINUX有四种基本文件系统类型: 1.普通文件: ...
- TiDB基本简介
一.TiDB整体架构 与传统的单机数据库相比,TiDB具有以下优势: 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容 支持SQL,对外暴露MySQL的网络协议,并兼容大多数MySQL的语法,在大多数 ...
- mysql批量新增的语法
?useUnicode=true//语序编码反射光hi &characterEncoding=UTF-8//字符 &autoReconnect=true//自动连接 &useA ...
- asp语言中if判断语句的求助
If a < 5 Then Response.Redirect("1.asp")ElseIf a > 5 And a < 8 Then Response. ...
- 简单C++线程池
简单C++线程池 Java 中有一个很方便的 ThreadPoolExecutor,可以用做线程池.想找一下 C++ 的类似设施,尤其是能方便理解底层原理可上手的.网上找到的 demo,基本都是介绍的 ...