sql >> Database teknologi >  >> RDS >> Mysql

Hvordan beder jeg om hjælp til at optimere og rette forespørgsler i MySQL?

Brug VIS OPRET TABEL

Dette fortæller mig mere om dine tabeller, end dine ord nogensinde kunne:

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)

ADVARSEL :Hvis du har 70 kolonner i din tabel, udelad de unødvendige . Hvad er nødvendigt?

  • Felter tilsluttet sig den
  • Felter er valgt
  • Felter WHEREed på

Brug EXPLAIN

Dette giver mig mulighed for at se, hvordan du bedst optimerer din aktuelt fungerende, men formodentlig langsomme forespørgsel:

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)

Brug \G

At skulle scrolle til højre er generelt en gene.

Almindelig:

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)

Bedre:

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)

ADVARSEL: \G gør åbenbart en række data til flere. Dette bliver lige så besværligt for flere rækker af data. Gør det, der ser bedst ud.

Brug en ekstern pastebin til ubehageligt store bidder af data:

Fortæl os dine forventninger

  • Langsomt? - Vi ved ikke, hvad der er langsomt for dig. Sekunder, minutter, timer? Det hjælper at vide.
  • Hurtigere - Det ved vi heller ikke. Hvad forventer du af hurtige?
  • Frekvens - Er dette en forespørgsel, du planlægger at køre én gang? Daglige? Hundrede eller tusindvis af gange om dagen? Dette hjælper os med at vide, hvornår det er Godt nok .


  1. Tjek om der findes en tabel i SQL Server

  2. Sammenligning af databasekolonnetyper i MySQL, PostgreSQL og SQLite? (Cross-mapping)

  3. Flere datacenteropsætninger ved hjælp af Galera Cluster til MySQL eller MariaDB

  4. Hvorfor bliver SQL Server-skalære funktioner langsommere?