您当前的位置:首页 > 互联网教程

MySQL的缓存对象有什么

发布时间:2025-05-13 09:10:29    发布人:远客网络

MySQL的缓存对象有什么

一、MySQL的缓存对象有什么

1、1)只缓存SELECT语句。SHOW命令和存储程序不会被缓存。

2、 2)不能缓存预编译语句(prepared statement)和游标。查询缓存中保存的是查询语句和结果集,而预编译语句中存在替代符和额外的参数,游标从块中读取结果,因此上述两种情况不能被缓存。

3、 3)查询语句不能包含动态内容。多次执行某SQL,必须能够返回相同的结果集,因此查询中不能包含像UUID(), RAND(), CONNECTION_ID()这样的函数。

4、 4)SQL中包含定义函数和自定义变量不会被缓存。

5、 Mysql> select* from test where id=@id像这种语句也不会缓存

6、 5)对系统表的查询不会被缓存。

7、 Mysql> select* from mysql.user where user=’root’

8、 6)非自动提交(显示使用BEGIN…END)事务中的SQL不会被缓存。

9、 7)使用TEMPORARY表的SQL不会被缓存。

10、 8)不使用任何表的SQL不会被缓存。

11、 9)在下面的SELECT操作也不会被缓存:

12、 SELECT* FROM...WHERE autoincrement_col IS NULL

二、如何清理MySQL 的查询缓存

1、MySQL的FLUSH可以清理mysql数据库缓存数据

2、MySQL的FLUSH句法(清除或者重新加载内部缓存) FLUSH flush_option [,flush_option],如果你想要清除一些MySQL使用内部缓存,你应该使用FLUSH命令。为了执行FLUSH,你必须有reload权限。

3、flush_option可以是下列任何东西:

4、HOSTS这个用的最多,经常碰见。主要是用来清空主机缓存表。如果你的某些主机改变IP数字,或如果你得到错误消息Host... isblocked,你应该清空主机表。当在连接MySQL服务器时,对一台给定的主机有多于 max_connect_errors个错误连续不断地发生,MySQL为了安全的需要将会阻止该主机进一步的连接请求。清空主机表允许主机再尝试连接。

5、LOGS关闭当前的二进制日志文件并创建一个新文件,新的二进制日志文件的名字在当前的二进制文件的编号上加1。

6、PRIVILEGES这个也是经常使用的,每当重新赋权后,为了以防万一,让新权限立即生效,一般都执行一把,目地是从数据库授权表中重新装载权限到缓存中。

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

8、FLUSH TABLES WITH READ LOCK关闭所有打开的表,同时对于所有数据库中的表都加一个读锁,直到显示地执行unlock tables,该操作常常用于数据备份的时候。解锁的语句就是unlock tables。

9、FLUSH TABLES WITH READ LOCK对于数据库是全局的表锁定,如果只想锁定几个表,可以用LOCK TABLES tbl_name [AS alias]{READ [LOCAL]| [LOW_PRIORITY] WRITE}。这个命令同样需要unlock tables来解锁。

10、read-lock:允许其他并发的读请求,但阻塞写请求,即可以同时读,但不允许任何写。也叫共享锁。write-lock:不允许其他并发的读和写请求,是排他的(exclusive)。也叫独占锁

11、MASTER删除所有的二进制日志索引文件中的二进制日志文件,重置二进制日志文件的索引文件为空,创建一个新的二进制日志文件,不过这个已经不推荐使用,改成reset master了。可以想象,以前自己是多土啊,本来一条简单的命令就可以搞定的,却要好几条命令来,以前的做法是先查出来当前的二进制日志文件名,再用purge操作。

12、QUERY CACHE重整查询缓存,消除其中的碎片,提高性能,但是并不影响查询缓存中现有的数据,这点和Flush table和Reset Query Cache(将会清空查询缓存的内容)不一样的。

13、SLAVE类似于重置复制吧,让从数据库忘记主数据库的复制位置,同时也会删除已经下载下来的relay log,与Master一样,已经不推荐使用,改成Reset Slave了。这个也很有用的。

14、一般来讲,Flush操作都会记录在二进制日志文件中,但是FLUSH LOGS、FLUSH MASTER、FLUSH SLAVE、FLUSH TABLES WITH READ LOCK不会记录,因此上述操作如果记录在二进制日志文件中话,会对从数据库造成影响。

三、MySQL数据库无法缓存数据的原因及解决方法mysql不能被缓存

MySQL数据库无法缓存数据的原因及解决方法

MySQL是广泛使用的关系型数据库管理系统,具有高效性和可靠性。然而,有时会发生MySQL无法缓存数据的情况。本文将探讨此问题发生的原因,并提供相应的解决方法。

在介绍MySQL数据库无法缓存数据的原因之前,我们需要了解缓存的基本概念。

缓存是通过将经常访问的内容存储在快速访问存储器(如内存)中,以提高访问速度的过程。MySQL数据库也使用缓存来提高访问速度和性能。

MySQL缓存通常分为两种类型:查询缓存和InnoDB缓存。查询缓存存储解析和转换查询语句时产生的结果集。而InnoDB缓存仅仅缓存查找表的行时用到的数据,未命中缓存的行将从磁盘加载。

MySQL数据库无法缓存数据的原因可能包括以下情况。

MySQL缓存默认值通常较小,如果存储引擎缓存被用满了,那么新的查询就无法被缓存,从而降低了整体的访问速度。为了解决此问题,您可以通过增加缓存池大小来提高MySQL的性能。

$ mysql> show variables like‘query_cache_size’;

+——————+———–+

+——————+———–+

+——————+———–+

2.2.查询中包含不可被缓存的语句

一些查询语句可能无法被缓存,例如包含了不可缓存的函数或错误的语法。在这种情况下,查询结果将不能被缓存并重新查询数据库。因此,您应该使用可缓存的语法和函数以充分利用MySQL的查询缓存。

MySQL缓存通过将静态的查询结果存储在内存中来提高性能。因此,如果数据被经常更新,则可能无法存储在缓存中。一种解决方法是通过增加缓存的生存时间以减少重新查询的次数。

$ mysql> show variables like‘query_cache_type’;

+——————+———+

+——————+———+

+——————+———+

$ mysql> show variables like‘query_cache_min_res_unit’;

+————————–+——-+

+————————–+——-+

| query_cache_min_res_unit| 4096|

+————————–+——-+

针对上述MySQL数据库无法缓存数据的原因,可以采取以下措施来解决。

通过增加缓存池大小来提高MySQL的性能。

使用可缓存的语法和函数以充分利用MySQL的查询缓存。

通过增加缓存的生存时间以减少重新查询的次数。

MySQL数据库无法缓存数据是一个常见的问题,并对查询性能造成巨大的影响。在本文中,我们介绍了MySQL缓存的基本概念和无法缓存数据的原因,并提供了一些解决方法。通过适当的调整和配置MySQL的缓存设置,可以提高查询的性能和性能。