Приховані особливості 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.