网站优化之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命令查询系统状态及系统变量,通过定位分析 ...
随机推荐
- Django 反向解析 request CBV
正则路径中的分组 无名分组 分组的概念:就是给某一段正则表达式用小括号括起来 无名分组按位置传参数,一一对应. view中除去request,其他形参数量要与urls中分组数量一致. 无名分组就是将括 ...
- IDE快捷键的使用
ctrl+ait+l,整理代码 ctrl+atl+v,生成等号左边的类型和变量 shift+方向键,选择内容 ctrl+方向键,自己领悟.常常与shift同时使用 ctrl+alt+方向键,光标前进或 ...
- 《手把手教你》系列技巧篇(二十)-java+ selenium自动化测试-元素定位大法之终卷(详细教程)
1.简介 这篇文章主要是对前边的文章中的一些总结和拓展.本来是不打算写着一篇的,但是由于前后文章定位元素的时间有点长,怕大家忘记了,就在这里简单做一个总结和拓展. 2.Selenium八种定位方式 S ...
- Seata–分布式事务
10.1 分布式事务基础 10.1.1 事务 事务指的就是一个操作单元,在这个操作单元中的所有操作最终要保持一致的行为,要么所有操作都成功,要么所有的操作都被撤销.简单地说,事务提供一种"要 ...
- 阿里云rds分区
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'xw_user_appl ...
- react启动报babel-eslint依赖版本不一致
遇到的问题: gitlab上拉的react的项目,下载依赖之后,yarn start启动报错 因为按他说的步骤:1.改动比较大, 2.完全没什么作用(重点) 解决方案:直接忽略,如果项目没有.env文 ...
- bootStrap模态框与select2合用时input不能获取焦点、模态框内部滑动,select选中跳转
bootStrap模态框与select2合用时input不能获取焦点 在bootstrap的模态框里使用select2插件,会导致select2里的input输入框没有办法获得焦点,没有办法输入. 把 ...
- mysql:刚刚知道的冷知识(一)
唯一索引的值可以null 1.创建一张user表,name字段指定为唯一索引 create table user( id int primary key auto_increment, name va ...
- .NetCore3.1获取文件并重新命名以及大批量更新及写入数据
using Microsoft.AspNetCore.Mvc; using MySql.Data.MySqlClient; using System; using System.Collections ...
- HCNP Routing&Switching之OSPF LSA类型(二)
前文我们了解了OSPF的一类.二类.三类LSA,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15209829.html:今天我们来聊一聊OSPF的四类和五类L ...