分类目录归档:MySQL

MySQL

通过SQL语句查看MySQL数据库的表空间状态

1. 查看数据库的索引空间大小

在MySQL Workbench中运行以下SQL语句:

  1. -- GB为单位
  2. SELECT
  3. CONCAT(ROUND(SUM(index_length)/(1024*1024*1024), 6), ' GB') AS 'Total Index Size'
  4. FROM
  5. information_schema.TABLES
  6. WHERE
  7. table_schema LIKE 'database';
  8. -- MB为单位
  9. SELECT
  10. CONCAT(ROUND(SUM(index_length)/(1024*1024), 6), ' MB') AS 'Total Index Size'
  11. FROM
  12. information_schema.TABLES
  13. WHERE
  14. table_schema LIKE 'database';

继续阅读通过SQL语句查看MySQL数据库的表空间状态

使用MERGE存储引擎实现MySQL的分表机制

当一张表的数据量达到上百万条记录时,单台MySQL数据库采用传统的单表方式就很有可能无法满足业务的性能需求。解决这种性能问题的技术方案很多,包括分表、分库或搭建MySQL集群,每种技术方案又分别有若干种实现方式。本文将通过实例描述如何使用MERGE存储引擎实现MySQL的分表机制,不会涉及其他的技术方案或实现方式。

一、建立数据库

继续阅读使用MERGE存储引擎实现MySQL的分表机制

如何查看MySQL中的数据大小?

以下方法可用于查看MySQL中各个级别数据的大小:

1. 查看MySQL中所有数据的大小

  1. -- 使用信息数据库
  2. use information_schema;
  3. -- 查看所有数据的总大小
  4. select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES;

2. 查看MySQL中指定数据库的大小

  1. -- 使用信息数据库
  2. use information_schema;
  3. -- 查看指定数据库的大小
  4. select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema=<schema_name>;

3. 查看MySQL中指定表的大小

  1. -- 使用信息数据库
  2. use information_schema;
  3. -- 查看指定表的大小
  4. select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema=<schema_name> and table_name=<table_name>;

注意

继续阅读如何查看MySQL中的数据大小?

MySQL的Query Cache详解

一、原理概述

Query Cache就是把“查询返回的结果”缓存起来。但是,仅仅只是缓存“查询返回的结果”,其实是不准确的,Query Cache还会缓存查询语句,在内存中将“查询语句”和“查询返回的结果”映射起来。

当MySQL接收到一条SELECT类型的查询语句时,MySQL会对这条查询语句进行hash计算而得到一个hash值。然后,通过该hash值到Query Cache中去匹配。如果没有得到匹配结果,则会将这个hash值存放在一个hash链表中,同时将此次查询的结果存放至缓存中。存放hash值的链表的每个节点都会存放相应查询返回结果在缓存中的地址,以及该次查询所涉及到的一些表的相关信息。如果通过hash值匹配到相同的查询,则会直接将缓存中相应的查询结果返回给客户端。如果MySQL的任何一张表中的任何一条数据发生了变化,便会通知Query Cache,将和这张表相关的查询缓存全部失效,并释放占用的内存空间。修改表数据的操作包括:INSERTUPDATEDELETETRUNCATEALTER TABLEDROP TABLEDROP DATABASE等等。

继续阅读MySQL的Query Cache详解