一些MySQL有意思的知识点

一些MySQL有意思的小点,原文来自: https://mp.weixin.qq.com/s/Mqsy31jP8C4tZ-yhQi39FQ

/*! xxx / 这种是 MySQL 对标准 SQL 的扩展,是一种特殊语法。这种对标准 SQL 扩展的语法发明的目标,是为了让同一条 SQL 可以兼容别的数据库。他的原理就是,/! xxx */ 可以在 MySQL 识别和执行,在其他数据库会认为这是注释而不执行

SELECT /*!40001 SQL_NO_CACHE */ * FROM sbtest1;

  • !40001 是什么意思。他的意思是大于等于 4.0.1 版本才会执行
-- 当前版本号
select version();
+-----------+
| version() |
+-----------+
| 8.0.28    |
+-----------+

-- 使用版本匹配的tag
 select id /*!80028 ,k */ from sbtest1 limit 10;
+--------+--------+
| id     | k      |
+--------+--------+
| 738838 | 158811 |
| 396568 | 168092 |
| 117599 | 170807 |
| 226532 | 171118 |
| 877636 | 173768 |
| 856050 | 177556 |
| 774942 | 178717 |
| 407211 | 180814 |
| 500802 | 181773 |
| 758122 | 182954 |
+--------+--------+
10 rows in set (0.0017 sec)

-- 使用高于版本的tag,被标记为注释
 10.186.61.162:3306  sbtest  SQL > select id /*!80029 ,k */ from sbtest1 limit 10;
+--------+
| id     |
+--------+
| 738838 |
| 396568 |
| 117599 |
| 226532 |
| 877636 |
| 856050 |
| 774942 |
| 407211 |
| 500802 |
| 758122 |
+--------+
10 rows in set (0.0013 sec)


## hint /*+ */
```bash
## For MySQL 8.0 only
/*+ INDEX */ 替代了 FORCE INDEX
/*+ NO_INDEX */ 替代了 IGNORE INDEX
  • MAX_EXECUTION_TIME 限制SQL最长执行时间
    mysql> select /*+ MAX_EXECUTION_TIME(100) */ count(1) from sbtest1;
posted @ 2022-06-28 10:37  ZhenXing_Yu  阅读(90)  评论(0编辑  收藏  举报