在MySQL的SQL语句或SQL文件经常看到如下用户:
SELECT /*!40001 SQL_CACHE */ * FROM pre_common_syscache WHERE cname IN ('ipbanned')/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;请问其中/*!代码 ……*/代表什么意思?可以用于哪些地方?我在MySQL手册中没有看到具体讲解。
谢谢
SELECT /*!40001 SQL_CACHE */ * FROM pre_common_syscache WHERE cname IN ('ipbanned')/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;请问其中/*!代码 ……*/代表什么意思?可以用于哪些地方?我在MySQL手册中没有看到具体讲解。
谢谢
40001 SQL_CACHE, 意味着数据库要缓存整个SQL语句。还有SQL_NO_CACHE的hint
show status like 'qcache_%'
select /*!40001 SQL_CACHE */ * FROM tb
select /*!40001 SQL_no_CACHE */ * FROM tb 效果和不加/*!..*/一样
select SQL_CACHE * FROM tb
select SQL_no_CACHE * FROM tb
还有相关变量
变量:query_cache _type,查询缓存的操作模式。有3中模式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。
但MYSQL中 为了保持兼容标准SQL,MYSQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL中它会执行在其他数据库中 /*! ... */就是注释