博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单表查询优化的一些小总结,非索引设计
阅读量:6854 次
发布时间:2019-06-26

本文共 1493 字,大约阅读时间需要 4 分钟。

单表查询优化:(关于索引,后面再开单章讲解)

(0)可以先使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮我们分析是查询语句或是表结构的性能瓶颈。

(1)写sql要明确需要的字段,要多少就写多少字段,而不是滥用 select *

(2)可以用使用连接(JOIN)来代替子查询

(3)使用分页语句:limit start , count 或者条件 where子句时,有什么可限制的条件尽量加上,查一条就limit一条。做到不滥用。比如说我之前做过的的p2p项目,只是需要知道有没有一个满标的借款,这样的话就可以用上 limit 1,这样mysql在找到一条数据后就停止搜索,而不是全文搜索完再停止。

(4)开启查询缓存:

大多数的MySQL服务器都开启了查询缓存。这是提高查询有效的方法之一。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。

查询缓存工作流程:

A):服务器接收SQL,以SQL+DB+Query_cache_query_flags作为hash查找键;

B):找到了相关的结果集就将其返回给客户端;

C):如果没有找到缓存则执行权限验证、SQL解析、SQL优化等一些列的操作;

D):执行完SQL之后,将结果集保存到缓存

当然,并不是每种情况都适合使用缓存,衡量打开缓存是否对系统有性能提升是一个整体的概念。那怎么判断要不要开启缓存呢,如下:

1)通过缓存命中率判断, 缓存命中率 = 缓存命中次数 (Qcache_hits) / 查询次数 (Com_select)、

2)通过缓存写入率, 写入率 = 缓存写入次数 (Qcache_inserts) / 查询次数 (Qcache_inserts)

3)通过 命中-写入率 判断, 比率 = 命中次数 (Qcache_hits) / 写入次数 (Qcache_inserts), 高性能MySQL中称之为比较能反映性能提升的指数,一般来说达到3:1则算是查询缓存有效,而最好能够达到10:1

相关参数及命令:

与缓存相关的主要参数如下表所示。可以使用命令SHOW VARIABLES LIKE '%query_cache%'查看

单表查询优化的一些小总结,非索引设计

 

 

缓存数据失效时机

在表的结构或数据发生改变时,查询缓存中的数据不再有效。有这些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。

可以使用下面三个SQL来清理查询缓存:

1、FLUSH QUERY CACHE; // 清理查询缓存内存碎片。

2、RESET QUERY CACHE; // 从查询缓存中移出所有查询。

3、FLUSH TABLES; //关闭所有打开的表,同时该操作将会清空查询缓存中的内容。

InnoDB与查询缓存:

Innodb会对每个表设置一个事务计数器,里面存储当前最大的事务ID.当一个事务提交时,InnoDB会使用MVCC中系统事务ID最大的事务ID跟新当前表的计数器.

只有比这个最大ID大的事务能使用查询缓存,其他比这个ID小的事务则不能使用查询缓存.

另外,在InnoDB中,所有有加锁操作的事务都不使用任何查询缓存

 

喜欢的小伙伴,点个关注吧,每天分享新的内容!

转载于:https://www.cnblogs.com/microtiger/p/10417058.html

你可能感兴趣的文章
洛谷2038 无线网络发射器选址
查看>>
TP 服务器phpmyadmin用不了原因之一 开启伪静态 需要修改文件
查看>>
Java基础学习总结(1)——equals方法
查看>>
对于工作的一点点感悟
查看>>
大型网站技术架构(八)网站的安全架构
查看>>
查询Oracle正在执行和执行过的SQL语句
查看>>
MyBatis学习总结(10)——批量操作
查看>>
Linux的shell脚本打印图形和主机监控脚本练习
查看>>
storm流处理的简单例子的一些问题
查看>>
我的友情链接
查看>>
php5.2.5安装xcache-2.0.0
查看>>
varnish缓存四:性能调优
查看>>
关于顽固进程scclient.exe、scguardc.exe、sccltui.exe和系统服务scclient、scguardc
查看>>
什么是事务型的存储引擎
查看>>
unity 生命周期
查看>>
一次观影经验看互联网的赚钱之道
查看>>
硬链接与符号链接的区别.
查看>>
手机自适应web
查看>>
第 6 章 存储 - 042 - 用 volume container 共享数据
查看>>
linux学习指南
查看>>