隠された機能を持つという長い伝統の中で、MySQLの隠された機能のリストを用意しましょう。
回答ごとに1つの機能を配置してください。
関連項目:
Linuxの
非表示機能PowerShellの
非表示機能Oracle Databaseの
非表示機能Windows 2008の
非表示機能Solaris / OpenSolarisの
非表示機能SQL Serverの
非表示機能IISの非表示機能(6.0 / 7.0)
隠された機能を持つという長い伝統の中で、MySQLの隠された機能のリストを用意しましょう。
回答ごとに1つの機能を配置してください。
関連項目:
Linuxの
非表示機能PowerShellの
非表示機能Oracle Databaseの
非表示機能Windows 2008の
非表示機能Solaris / OpenSolarisの
非表示機能SQL Serverの
非表示機能IISの非表示機能(6.0 / 7.0)
回答:
頻繁に使用されないが、より冗長
便利ではなく、素晴らしいとして良いとして非企業クエリアナライザ -そうのように有効
mysql> set profiling = 1;
クエリOK、影響を受ける行はありません(0.00秒)
これら2つは、プロファイルテーブルを埋めるためのジャンククエリです。
mysql> select * from _test.customers;
エラー1146(42S02):テーブル '_test.customers'は存在しません
mysql> select * from test.customers limit 0;
空のセット(0.00秒)
プロファイルされたすべてのクエリとその期間のリストを取得します
mysql>プロファイルを表示します。
+ ---------- + ------------ + ------------------------- ------ +
| Query_ID | 期間| クエリ|
+ ---------- + ------------ + ------------------------- ------ +
| 1 | 0.00013400 | select * from _test.customers |
| 2 | 0.01546500 | test.customersから*を選択します|
+ ---------- + ------------ + ------------------------- ------ +
最後のクエリの表示情報は「プロファイルの表示」になります-またはクエリを指定できます
mysql>クエリ2のプロファイルを表示。
+ ---------------------- + ---------- +
| ステータス| 期間|
+ ---------------------- + ---------- +
| 開始| 0.000053 |
| 許可の確認| 0.000007 |
| テーブルを開く| 0.000014 |
| システムロック| 0.000006 |
| テーブルロック| 0.000008 |
| init | 0.000065 |
| 最適化| 0.000003 |
| 実行する| 0.000201 |
| 終了| 0.000003 |
| クエリ終了| 0.000002 |
| アイテムを解放する| 0.000020 |
| 遅いクエリのロギング| 0.000002 |
| クリーンアップ| 0.000004 |
+ ---------------------- + ---------- +
セットの13行(0.00秒)
CPU、BLOCK IO、SWAPSなどの特定の情報をリクエストすることもできます(すべてmanページにあります)
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 |
| init | 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> set profiling = 0;
クエリOK、影響を受ける行はありません(0.00秒)
常に一般的に知られたり記憶されているわけではない一部の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 -はポケットベルとして使用するアイデアが好きです。本当にmysql固有ではない
私が学んだことは、いくつかの人に役立つかもしれないことを学んだ:
以前に保存したファイルを実行するには:
source filename # Alternatively you can enter "\\. filename".
使用する "\!" シェルコマンドにアクセスします。例えば:
\\! 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%';
最後に、my.cnfファイルの使用を見ずにMySQLデータディレクトリの場所を見つけるには:
SHOW VARIABLES LIKE 'datadir';
私は個人的にSHOWコマンドが好きです
できること
SHOW PROCESSLIST-mysqlへのすべての実行中の接続
SHOW CREATE TABLE TableNameを確認する
SHOW CREATE PROCEDURE ProcedureName- テーブルの作成に使用されるsql を確認する-SPの作成に使用されるsqlを確認する
SHOW VARIABLES-すべてのシステム変数を確認する
完全なリストはこちら
実際に文書化されていますが、非常に迷惑です:不正なデータの自動日付変換。
MySQL 5.0.2より前では、MySQLは違法または不適切なデータ値を許容しており、データ入力の正当な値に強制します。MySQL 5.0.2以降では、これがデフォルトの動作のままですが、サーバーのSQLモードを変更して、サーバーがそれらを拒否し、発生したステートメントを中止するように、より伝統的な不良値の処理を選択できます。
MySQLが入力を近くの有効な日付に調整せず、代わりに0000-00-00定義上無効であるとして保存する場合、「幸運」になることがあります。ただし、その場合でも、この値をサイレントに保存するのではなく、MySQLに障害が発生する可能性があります。
MySQLを他のデータベースと区別するもう1つの機能は、REPLACE INTOコマンドです。できるよ:
REPLACE INTO T1 (Col1, Col2 )
SELECT Col1, Col2 FROM T2;
updateステートメントを記述するのと同じように、replaceステートメントを記述することもできます。
REPLACE INTO T1
SET Col1 = 'SomeValue1'
, Col2 = 'SomeValue2'
実際には隠された機能ではありませんが、あまり知られていないので、UPDATEまたはINSERTを行う前に何かが存在するかどうかを確認するためにクエリを保存するためによく使用します
INSERT ... ON DUPLICATE KEY UPDATE
ドキュメントはこちら
あまり隠されていませんが、slow-query-logは、ピーク時にパフォーマンスの問題の原因を追跡するのに非常に役立ちます。
fileのmy.cnf[mysqld]セクション-追加:
log_slow_queries=/var/log/mysql/mysql-slow.log
# log queries that took more than 1 sec
long_query_time = 1
まあ、これは別のサイトであるため重複としてマークすることはできません(ここには担当者がいません)が、同じ質問のこの優れたstackoverflowの投稿にリンクします。
正しいmy.cnfファイルにスロークエリログへのパスをまだ追加していない場合、pQDの回答への追加として(noobieとして私はまだコメントを追加できません)、エラーログはデータディレクトリに書き込まれ(SHOW VARIABLES LIKE 'datadir';これがどこにあるかを調べるには)、ファイル名は[systemname] -slow.logの形式になります