sql >> Databáze >  >> RDS >> Mysql

Jak mohu požádat o pomoc s optimalizací a opravou dotazů v MySQL?

Použijte SHOW CREATE TABLE

To mi o vašich tabulkách řekne víc, než by kdy mohla vaše slova:

mysql> show create table magic\G
*************************** 1. row ***************************
       Table: magic
Create Table: CREATE TABLE `magic` (
  `id` int(11) DEFAULT NULL,
  `what` varchar(255) DEFAULT NULL,
  `the` datetime DEFAULT NULL,
  `heck` text,
  `soup_is_good` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

UPOZORNĚNÍ :Pokud máte v tabulce 70 sloupců, vynechejte ty nepotřebné . Co je nutné?

  • Pole se připojila dne
  • VYBRANÁ pole
  • Pole WHEREed on

Použijte EXPLAIN

To mi umožňuje zjistit, jak nejlépe optimalizovat váš aktuálně fungující, ale pravděpodobně pomalý dotaz:

mysql> explain select *     from magic\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: magic
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1
        Extra: 
1 row in set (0.00 sec)

Použijte \G

Posun doprava je obecně nepříjemnost.

Obvyklé:

mysql> select * from magic;
+------------+-------------------------------+---------------------+-------------------+--------------+
| id         | what                          | the                 | heck              | soup_is_good |
+------------+-------------------------------+---------------------+-------------------+--------------+
| 1000000000 | A really long text string yay | 2009-07-29 22:28:17 | OOOH A TEXT FIELD |        100.5 | 
+------------+-------------------------------+---------------------+-------------------+--------------+
1 row in set (0.00 sec)

Lepší:

mysql> select * from magic\G
*************************** 1. row ***************************
          id: 1000000000
        what: A really long text string yay
         the: 2009-07-29 22:28:17
        heck: OOOH A TEXT FIELD
soup_is_good: 100.5
1 row in set (0.00 sec)

UPOZORNĚNÍ: \G samozřejmě změní jeden řádek dat na několik. To se stává stejně těžkopádným pro několik řádků dat. Dělejte to, co vypadá nejlépe.

Použijte externí pastebin pro nepříjemně velké kusy dat:

Sdělte nám svá očekávání

  • Pomalý? - Nevíme, co je pro vás pomalé. Sekundy, minuty, hodiny? Pomáhá vědět.
  • Rychlejší -To taky nevíme. Co očekáváte od rychlého?
  • Frekvence - Je to dotaz, který plánujete spustit pouze jednou? Denně? Stokrát nebo tisíckrát za den? To nám pomáhá vědět, kdy je to Dost dobré .


  1. MySQL 8.0 – klient nepodporuje ověřovací protokol požadovaný serverem; zvažte upgrade klienta MySQL

  2. Změňte tabulku, pokud existuje, nebo vytvořte, pokud neexistuje

  3. Vysmívat se MySQL databázi v Pythonu

  4. Když princip DRY neplatí:BITWISE operace v SQL Serveru