黑猫的博客

mysql之查询缓存QUERY_CACHE

查询缓存(QueryCache)保存查询返回的完整结果。当查询命中该缓存,MySQL会立即返回结果,跳过解析、优化和执行阶段。

官方在特定环境测试结果(官方文档中有详细说明):

1.如果对某表进行简单查询,但每次查询条件都不一样时,打开查询缓存会导致性能下降13%。

2.如对一个只有一行数据的表进行查询,则可以提升238%。

所以查询缓存特别适用于更新频率非常低、查询频率非常高的场景。

缓存命中规则

缓存存放在一个引用表中,通过一个哈希值引用,哈希值包含了(查询本身、当前查询的数据库、客户端协议的版本等)。

判断是否命中时,MySQL不会解析语句,而是直接使用SQL语句和客户端发送来的其他原始信息。任何字符上的不同都会导致缓存不命中。

如果查询语句中包含任何的不确定函数则不会缓存(如NOW()),因为在执行这个查询之后,MySQL会禁止缓存该查询,所以在查询缓存中是不可能找缓存的。

什查询缓存能发挥作用

并不是所有情况下查询缓存都能提高系统性能。打开查询缓存对读和写操作都会带来额外消耗:

  • 读查询在开始之前必须先检查是否命中缓存。
  • 如果这个读查询可以被缓存,那么当完成执行后,需要将结果存入缓存。
  • 每次写入操作时,需要将对应表的所有缓存都设置失效。如果缓存较大或碎片很多,则会带来很大消耗。

缓存命中率:

SHOW STATUS中能提供一个全局的性能指标用以计算缓存命中率:

每次SELECT查询,要么增加Qcache_hits(查询缓存命中次数),要么增加Com_select(无缓存的查询次数+错误查询+权限检查查询),所以命中率计算公式:Qcache_hits / (Qcache_hits + Com_select)。

缓存配置和维护

query_cache_type:是否打开查询缓存。可以设置为(OFF、ON、DEMAND)。DEMAND表示只有在查询语句中明确标记SQL_CACHE的语句才放入查询缓存。

query_cache_size:查询缓存使用总空间。

query_cache_min_res_unit:在查询缓存中分配内存块的最小单位。

query_cache_limit:MySQL能缓存的最大查询结果。

query_cache_wlock_invalidate:如果某个数据表被其他的连接锁住,是否仍然从查询缓存中返回结果。

 

 

指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:

SHOW VARIABLES LIKE ‘%query_cache%’;
SHOW STATUS LIKE ‘Qcache%’;

 

mysql之 主从复制

概念:

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。

MySQL之慢查询日志总结

我们程序员可以定义一个时间界限(如:3s),只要有sql语句的执行时间超过我们所规定的时间界限,就会被记录在日志文件里面,我们就可以在日志文件中找出这些有问题的sql语句,从而优化它。

MySQL之profile工具

使用profile工具,可以查看出某条sql语句所花费时间消耗在哪里

mysql之explain执行计划

explain可以帮助我们分析select语句,让我们知道查询效率低下的原因,从而改进我们的查询

系统吞吐量、TPS(QPS)、用户并发量概念和公式

**QPS: **每秒钟处理完请求的次数;注意这里是处理完。具体是指发出请求到服务器处理完成功返回结果。

**TPS:**每秒钟处理完的事务次数。

并发量:系统能同时处理的请求数。

RT:响应时间,处理一次请求所需要的平均处理时间。

计算关系:

QPS = 并发量 / 平均响应时间

并发量 = QPS * 平均响应时间

SQL语言概念

SQL:Structured Query Language,结构化查询语言!

DDL:Data Definition Language,数据定义语言!

主要是用来定义和维护数据库的各种对象(比如库、表、索引和视图等),也可以说操作的层次是在数据库和表的逻辑结构和存储结构上面,并没有对表中的实际的数据进行操作!

DML:Data manipulation Language,数据操作语言

主要是对表中的记录进行增删改查的操作!

DCL:Data Control Language,数据控制语言

主要是对数据库进行统一控制和统一管理的工作,比如并发控制、存取控制、安全控制等;具体的有:数据库的权限管理,数据的备份与恢复等!

mysql之索引

分类:

  1. 主键索引:一个表只能有一个主键索引,但是可以有复合主键索引.
  2. 普通索引:一个表可以有多个普通索引.
  3. 全文索引:只有(varchar,text英文)myisam引擎才有(mysql5.6版本后也有),只对英文有效,对中文索引采用sphinx来操作
  4. 唯一索引:一个表可以有多个唯一索引,就是字段的值不可以相同(一般使用程序控制一个字段的唯一性)
  5. 复合(多列、联合)索引:由多个字段组成的索引

mysql之 子查询

从形式上看,子查询就是一个select语句中又出现了一个select语句

最基本的要求:子查询语句需要使用一对括号括起来!

mysql之数据的备份

数据备份与还原,具体如下