MySQL的隐藏功能


15

在具有隐藏功能的悠久传统中,让我们列出MySQL中的隐藏功能。

每个答案要放一个功能。

另请参阅:
Linux的
隐藏功能PowerShell的
隐藏功能Oracle数据库的
隐藏功能Windows 2008的
隐藏功能Solaris / OpenSolaris的
隐藏功能SQL / SQL Server的
隐藏功能IIS的隐藏功能(6.0 / 7.0)

Answers:


9

经常不使用但更详细

显示完整的程序清单

方便,但不如出色的非企业查询分析器 -像这样启用

    mysql>设置配置文件= 1;
    查询正常,受影响的0行(0.00秒)

这两个是填充配置文件表的垃圾查询,

        
    mysql>从_test.customers中选择*;
    错误1146(42S02):表'_test.customers'不存在

    mysql> select * from test.customers限制为0;
    空置(0.00秒)
    

获取所有已分析查询及其持续时间的列表

        
    mysql>显示配置文件;
    + ---------- + ------------ + ------------------------- ------ +
    | Query_ID | 持续时间| 查询|
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | 从_test.customers中选择* |
    | 2 | 0.01546500 | 从test.customers中选择*
    + ---------- + ------------ + ------------------------- ------ +

上一个查询的显示信息只是“显示个人资料”-您也可以指定一个查询

  
    mysql>显示查询2的配置文件;
    + ---------------------- + ---------- +
    | 现状 持续时间|
    + ---------------------- + ---------- +
    | 开始 0.000053 |
    | 检查权限| 0.000007 |
    | 开幕桌| 0.000014 |
    | 系统锁| 0.000006 |
    | 桌锁| 0.000008 |
    | 初始化| 0.000065 |
    | 优化 0.000003 |
    | 执行 0.000201 |
    | 结束| 0.000003 |
    | 查询结束| 0.000002 |
    | 释放物品| 0.000020 |
    | 日志记录慢查询| 0.000002 |
    | 清理| 0.000004 |
    + ---------------------- + ---------- +
    设置13行(0.00秒)

您还可以请求特定信息,例如CPU,BLOCK IO和SWAPS等(全部在手册页上

  
    mysql>显示查询2的配置文件cpu;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 现状 持续时间| CPU_user | CPU_system |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 开始 0.000056 | 0.001000 | 0.000000 |
    | 检查权限| 0.000007 | 0.000000 | 0.000000 |
    | 开幕桌| 0.000010 | 0.000000 | 0.000000 |
    | 系统锁| 0.000005 | 0.000000 | 0.000000 |
    | 桌锁| 0.000007 | 0.000000 | 0.000000 |
    | 初始化| 0.000059 | 0.000000 | 0.000000 |
    | 优化 0.000003 | 0.000000 | 0.000000 |
    | 统计 0.015022 | 0.000000 | 0.000000 |
    | 准备 0.000014 | 0.001000 | 0.000000 |
    | 执行 0.000004 | 0.000000 | 0.000000 |
    | 发送数据 0.000245 | 0.000000 | 0.000000 |
    | 结束| 0.000004 | 0.000000 | 0.000000 |
    | 查询结束| 0.000002 | 0.000000 | 0.000000 |
    | 释放物品| 0.000021 | 0.000000 | 0.000000 |
    | 日志记录慢查询| 0.000002 | 0.000000 | 0.000000 |
    | 清理| 0.000004 | 0.000000 | 0.000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    设置16行(0.00秒)

不要忘了以后禁用它,因为日志记录会增加开销。

  
    mysql>设置配置文件= 0;
    查询正常,受影响的0行(0.00秒)

您还可以使用SHOW PROFILE ALL FOR QUERY X显示所有性能分析数据。
凯德雷2010年

8

一些并不总是众所周知或不记得的MySQL命令

将结果集方向更改为垂直,以便于阅读和粘贴。

mysql> SELECT CURDATE(), CURTIME()\G
*************************** 1. row ***************************
CURDATE(): 2009-06-26
CURTIME(): 12:10:37

取消您当前输入的查询,同时将其保留在历史记录中。

mysql> SELECT CURDATE(), CURTIME()\c
mysql>

使用您喜欢的$ EDITOR分别编辑查询或最后一个查询。

mysql> SELECT CURDATE(), CURTIME()\e
mysql> \e

清除控制台的输出。

mysql> \! clear

通过MD5哈希比较结果集。

mysql> pager md5sum -
PAGER set to 'md5sum -'
mysql> SELECT CURDATE(), CURTIME();
d24e22e4e2d33dfda9f01ba934b7676a  -
mysql> nopager
PAGER set to stdout

更改提示。

mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(dan@localhost) [test]>

在命令历史记录中搜索给定的字符串(例如Bash)。
开始输入搜索词并重复^ R以循环显示结果。

^R
(reverse-i-search)`DATE': SELECT CURDATE(), CURTIME();

md5sum +1。我喜欢md5sum -用作传呼机的想法。并不是特定
-serverhorror

4

我了解到的技巧可能对某些人有用:

要运行您之前保存的文件:

source filename      # Alternatively you can enter "\\. filename".

采用 ”\!” 访问shell命令。例如:

\\! ls c*sql   # To list all your SQL files in directory starting with "c".

因此,如果您想将语句写入文件(不使用编辑器选项),则可以输入:

\\! echo 'select * from emp where job ="salesman" '   > test2.sql   # Editor option seems easier to me though!

如果输入

\\T filename

然后,您会将语句和查询结果定向/打印到您指定的文件名。使用\\t关闭这个功能。

\\G而不是“;” 终止查询 为了以行格式而不是列显示输出。

不要排除在SHOW语句中使用Where ... LIKE子句。例如:

SHOW STATUS LIKE '%cache%';

最后,要查找MySQL数据目录的位置而不查看my.cnf文件,请使用:

SHOW VARIABLES LIKE 'datadir';

3

我个人喜欢SHOW命令

您可以做
SHOW PROCESSLIST-查看与mysql的所有正在运行的连接
SHOW CREATE TABLE TableName-查看用于创建表
SHOW CREATE PROCEDURE ProcedureName的sql-查看用于创建SP的sql-
SHOW VARIABLES查看所有系统变量

此处获取完整列表


1
您将“ SHOW”和“ EXPLAIN”等众所周知且已记录的命令列为“隐藏功能”,让我有些困惑。难道不是没有记载的隐藏功能吗?
约翰·加迪尼尔

好吧,其目的是带出不太为人所知的有用命令,别人可能不知道的是什么,怎么说呢?
Binoj Antony

3

实际记录但很烦人的是:错误数据的自动日期转换。

在MySQL 5.0.2之前,MySQL会容忍非法或不正确的数据值,并将其强制为合法值以进行数据输入。在MySQL 5.0.2及更高版本中,这仍然是默认行为,但是您可以更改服务器SQL模式以选择更传统的坏值处理方式,以便服务器拒绝它们并中止出现它们的语句。

有时,当MySQL不将输入调整为附近的有效日期,而是将其存储为0000-00-00定义上无效的日期时,您会很“幸运” 。但是,即使那样,您可能还是希望MySQL失败,而不是为您静默存储此值。


3

REPLACE INTO命令使MySQL与其他数据库区分开来的另一个功能。你可以做:

REPLACE INTO T1 (Col1, Col2 )
SELECT Col1, Col2 FROM T2;

您也可以像编写update语句一样编写replace语句:

REPLACE INTO T1 
SET Col1 = 'SomeValue1'
, Col2   = 'SomeValue2'

1
REPLACE INTO很有用,但是应该注意,它会执行密钥检查,如果找到匹配的密钥,则将其删除,然后再执行INSERT,这比INSERT ...花费更多的时间。–重复密钥更新
Andy

2

并不是真正的隐藏功能,但鲜为人知,我经常使用它来保存查询,以在执行UPDATE或INSERT之前检查是否存在某些内容

INSERT ... ON DUPLICATE KEY UPDATE

文档在这里



1

并不是真正的隐藏,但是慢速查询日志对于跟踪高峰时间性能问题的原因确实很有帮助。

在文件my.cnf[mysqld]部分-添加:

log_slow_queries=/var/log/mysql/mysql-slow.log
# log queries that took more than 1 sec
long_query_time = 1


0

就像添加pQD的答案一样(作为noobie,我还不能添加评论),如果您尚未在正确的my.cnf文件中添加慢查询日志的路径,则错误日志将为写入数据目录(使用SHOW VARIABLES LIKE'datadir';找出它在哪里),文件名的格式为[systemname] -slow.log

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.