Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como peço ajuda para otimizar e corrigir consultas no MySQL?

Use SHOW CREATE TABLE


Isso me diz mais sobre suas tabelas do que suas palavras jamais poderiam:
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)

AVISO :se você tiver 70 colunas em sua tabela, omita as desnecessárias . O que é necessário?
  • Campos unidos em
  • Campos SELECIONADOS
  • Campos ONDE estão ativados

Use EXPLAIN


Isso me permite ver a melhor forma de otimizar sua consulta atualmente em funcionamento, mas presumivelmente lenta:
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)

Usar \G


Ter que rolar para a direita é geralmente um inconveniente.

Normal:
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)

Melhor:
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)

AVISO: \G obviamente transforma uma linha de dados em várias. Isso se torna igualmente complicado para várias linhas de dados. Faça o que parece melhor.

Use um pastebin externo para grandes blocos de dados desagradáveis:

Deixe-nos saber suas expectativas

  • Lento? - Não sabemos o que é lento para você. Segundos, minutos, horas? Ajuda saber.
  • Mais rápido - Nós também não sabemos. Qual é a sua expectativa de rápido?
  • Frequência - Esta é uma consulta que você planeja executar apenas uma vez? Diário? Centenas ou milhares de vezes por dia? Isso nos ajuda a saber quando é Bom o suficiente .