文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL系列之九 mysql查询缓存及索引

2024-04-02 19:55

关注

系列教程

MySQL系列之开篇 MySQL关系型数据库基础概念
MySQL系列之一 MariaDB-server安装
MySQL系列之二 多实例配置
MySQL系列之三 基础篇
MySQL系列之四 SQL语法
MySQL系列之五 视图、存储函数、存储过程、触发器
MySQL系列之六 用户与授权
MySQL系列之七 MySQL存储引擎
MySQL系列之八 MySQL服务器变量
MySQL系列之十 MySQL事务隔离实现并发控制
MySQL系列之十一 日志记录
MySQL系列之十二 备份与恢复
MySQL系列之十三 MySQL的复制
MySQL系列之十四 MySQL的高可用实现
MySQL系列之十五 MySQL常用配置和性能压力测试

一、MySQL的架构

  1. 连接器
  2. 连接池,安全认证、线程池、连接限制、检查内存、缓存
  3. SQL接口 DML、DDL
  4. SQL解析器,对SQL语句的权限检查、解析为二进制程序
  5. 优化器,优化访问路径
  6. 缓存cache,buffer
  7. 存储引擎 innodb
  8. 文件系统
  9. 日志

二、查询缓存(Query Cache)

  1. SQL语句

  2. 查询缓存

  3. 解析器

  4. 解析树

  5. 预处理

  6. 查找最好的查询路径

  7. 查询优化SQL语句

  8. 执行计划

  9. API调用存储引擎

  10. 调用数据,返回结果

缓存SELECT操作或预处理查询的结果集和SQL语句,当有新的SELECT语句或预处理查询语句请求,先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小写。

不需要对SQL语句做任何解析和执行,当然语法解析必须通过在先,直接从Query Cache中获得查询结果,提高查询性能

查询缓存的判断规则,不够智能,也即提高了查询缓存的使用门槛,降低其效率;查询缓存的使用,会增加检查和清理Query Cache中记录集的开销

哪些查询可能不会被缓存:

查询缓存相关的服务器变量:


MariaDB [(none)]> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 33554432 |
| query_cache_strip_comments   | OFF      |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+

优化查询缓存:

查询缓存相关的状态变量:


MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 33536824 |
| Qcache_hits             | 0        |
| Qcache_inserts          | 0        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 4        |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+-------------------------+----------+
命中率和内存使用率估算:

三、索引

​ 索引是特殊数据结构:定义在查找时作为查找条件的字段,索引实现在存储引擎。

索引可以降低服务需要扫描的数据量,减少了IO次数
索引可以帮助服务器避免排序和使用临时表
索引可以帮助将随机I/O转为顺序I/O
但是占用额外空间,影响插入速度

1、索引类型:

2、高性能索引策略:

3、索引的优化建议

4、索引的创建与删除

创建索引

CREATE INDEX index_name ON tbl_name (index_col_name,...);

MariaDB [hellodb]> CREATE INDEX index_name ON students(name); #创建简单索引
MariaDB [hellodb]> CREATE INDEX index_name_age ON students(name,age); #创建复合索引

查看索引

SHOW INDEXES FROM [db_name.]tbl_name;

MariaDB [hellodb]> SHOW INDEX FROM students\G

删除索引

DROP INDEX index_name ON tbl_name;

MariaDB [hellodb]> DROP INDEX index_name ON students;

优化表空间

MariaDB [hellodb]> OPTIMIZE TABLE students;

查看索引使用的情况

启用记录索引使用情况:SET GLOBAL userstat=1;

查看索引使用情况:SHOW INDEX_STATISTICS;

我们可以统计不经常使用的索引从而进行优化

四、EXPLAIN命令

通过EXPLAIN来分析索引的有效性:EXPLAIN SELECT clause,获取查询执行计划信息,用来查看查询优化器如何执行查询


MariaDB [hellodb]> EXPLAIN SELECT name FROM students WHERE name = 'Lin Daiyu'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: students
         type: ref
possible_keys: index_name_age
          key: index_name_age
      key_len: 152
          ref: const
         rows: 1
        Extra: Using where; Using index

五、SQL语句性能优化

  1. 查询时,能不要*就不用*,尽量写全字段名
  2. 大部分情况连接效率远大于子查询
  3. 多表连接时,尽量小表驱动大表,即小表 join 大表
  4. 在千万级分页时使用limit
  5. 对于经常使用的查询,可以开启缓存
  6. 多使用explain和profile分析查询语句
  7. 查看慢查询日志,找出执行时间长的sql语句优化

到此这篇关于MySQL系列之九 mysql查询缓存及索引的文章就介绍到这了,更多相关mysql查询缓存及索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯