Приховані особливості MySQL


15

За багаторічною традицією наявності прихованих функцій, давайте список прихованих функцій у MySQL.

Поставте одну характеристику на відповідь.

Також див .:
Приховані особливості Linux
прихованих особливостей
прихованих особливостей PowerShell Hidden Oracle Database
Hidden Особливості Windows 2008
Приховані особливості Solaris / OpenSolaris
приховані особливості прихованих особливостей SQL Server
IIS

Відповіді:


9

Часто невикористаний, але більш багатослівний

ПОКАЗНИТИ ПОВНИЙ ПРОЦЕСЛІСТ

це зручно, але не так добре, як дивовижний непідприємницький аналізатор запитів - включіть так

    mysql> встановити профілювання = 1;
    Запит OK, 0 рядків задіяно (0,00 сек)

Ці два - непотрібні запити для заповнення таблиці профілів,

        
    mysql> виберіть * з _test.customers;
    ПОМИЛКА 1146 (42S02): Таблиця "_test.customers" не існує

    mysql> select * з test.citomers limit 0;
    Порожній набір (0,00 сек)
    

Отримайте список усіх профілів запитів та їх тривалості

        
    mysql> показати профілі;
    + ---------- + ------------ + ------------------------- ------ +
    | Запит_ID | Тривалість | Запит |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | виберіть * з _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> показати профіль CPU для запиту 2;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | Статус | Тривалість | CPU_user | CPU_система |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | починаючи | 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> встановити профілювання = 0;
    Запит OK, 0 рядків задіяно (0,00 сек)

ви також можете використовувати ПОКАЗУВАТИ ПРОФІЛЬ ВСІХ ЗА ЗАПИТАННЯ X, щоб показати всі дані профілювання.
Кедаре

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();

+1 на md5sum. Мені подобається md5sum -ідея використовувати як пейджер. Насправді не mysql конкретний ти
serverhorror

4

Прийоми, які я дізнався, які можуть бути корисними для деяких:

Щоб запустити раніше збережений файл:

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замість ";" щоб відобразити вихід у форматі рядків замість стовпців.

Не виключайте використання пункту Where ... LIKE з оператором SHOW. Наприклад:

SHOW STATUS LIKE '%cache%';

Нарешті, щоб знайти місцезнаходження вашого каталогу даних MySQL, не дивлячись на використання my.cnfфайлу:

SHOW VARIABLES LIKE 'datadir';

3

Мені особисто подобається SHOWкоманда

Ви можете зробити
SHOW PROCESSLIST- Щоб побачити всі запущені з'єднання з mysql
SHOW CREATE TABLE TableName- Щоб побачити sql, який використовується для створення таблиці
SHOW CREATE PROCEDURE ProcedureName- Щоб побачити sql, який використовується для створення SP
SHOW VARIABLES- Щоб побачити всі змінні системи

Повний список тут


1
Я трохи спантеличений вами, перелічуючи добре відомі та задокументовані команди, такі як SHOW та EXPLAIN, як "приховані функції". Чи не прихована функція, яка не задокументована?
Джон Гарденєр

Ну, намір полягає в тому, щоб вивести не настільки відомі корисні команди, що може бути добре відомо одному, може бути невідомо комусь іншому, що кажуть?
Біной Антоній

3

Насправді задокументовано , але дуже дратує: автоматичні перетворення дат для неправильних даних.

Перед MySQL 5.0.2 MySQL прощає незаконні або неправильні значення даних та примушує їх до законних значень для введення даних. У MySQL 5.0.2 і новіших версій це залишається поведінкою за замовчуванням, але ви можете змінити режим SQL сервера, щоб вибрати більш традиційне трактування поганих значень, таким чином, щоб сервер їх відкидав і скасовував заяву, в якій вони виникають.

Іноді вам пощастить, коли MySQL не налаштовує вхід до дійсних довколишніх дат, а натомість зберігає його як таке, 0000-00-00що за визначенням недійсне. Однак навіть тоді ви могли б хотіти, щоб MySQL вийшов з ладу, а не мовчки зберігав це значення для вас.


3

Ще одна особливість, яка відрізняє MySQL від інших баз даних, - це REPLACE INTOкоманда. Ви можете зробити:

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

Ви також можете написати оператор заміни так само, як ви пишете заяву оновлення:

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

1
ЗАМІНІТЬ В ІНФОРМАЦІЮ корисно, але слід зазначити, що вона виконує перевірку клавіш, ВІДКЛЮЧИТЬ, якщо знайдено відповідний ключ, то, нарешті, ВСТАВИТИ, що займає набагато більше часу, ніж ВСТАВИТИ ... НА ДУПЛІКАТИ КЛЮЧНОГО ОНОВЛЕННЯ
Енді

2

Насправді не прихована функція, але вона менш відома, і я її дуже багато використовую, щоб заощадити виконання запиту, щоб перевірити, чи існує щось, перш ніж робити ОНОВЛЕННЯ чи ВСТАВКА.

INSERT ... ON DUPLICATE KEY UPDATE

Документація тут


1

Щоб побачити план виконання запиту, використовуйте EXPLAIN

напр

EXPLAIN 
SELECT T1.Col1, T2.Col2
FROM T1 INNER JOIN T2 ON T1.Id = T2.Id
WHERE T1.Col3 = 10

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.