AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 130429
Accepted
dr_
dr_
Asked: 2016-02-26 02:50:26 +0800 CST2016-02-26 02:50:26 +0800 CST 2016-02-26 02:50:26 +0800 CST

SELECT tipos de consulta e otimização

  • 772

Estou utilizando um sistema de monitoramento de banco de dados que, entre outros dados, mostra os seguintes valores para consultas SELECT:

  1. número de junções que usam intervalos na primeira tabela
  2. número de junções que fazem uma varredura completa da primeira tabela
  3. número de junções sem chaves que verificam o uso da chave após cada linha
  4. número de junções que executam varreduras de tabela porque não usam índices
  5. número de junções que usam uma pesquisa de intervalo em uma tabela de referência

Dessas consultas, quais são as de menor desempenho e, portanto, devem ser otimizadas primeiro? Eu diria os números 2 e 4 em ordem de importância, mas também gostaria de ouvir comentários sobre os outros tipos.

Esse sistema de monitoramento mostra também o número total de consultas SELECT como a soma desses cinco valores. Esses são todos os casos possíveis e mutuamente exclusivos para um SELECT?

Não estou falando de uma consulta específica (que posso encontrar no log de consultas lentas); Estou mais interessado no tipo de consulta entre esses 5 listados acima. Por exemplo, varreduras completas de tabelas geralmente são ruins (a menos que estejamos trabalhando em tabelas pequenas, caso em que não nos importaremos com a otimização).

Minha outra dúvida era se esses tipos podem estar se sobrepondo, pois o sistema de monitoramento mostra um 6º valor que é a soma desses cinco, e isso não faz sentido se os tipos não forem mutuamente exclusivos (como suspeitamos).

mysql optimization
  • 1 1 respostas
  • 125 Views

1 respostas

  • Voted
  1. Best Answer
    Rick James
    2016-03-04T10:38:20+08:002016-03-04T10:38:20+08:00

    Nenhuma das acima.

    Uma "varredura completa" é irrelevante se a tabela tiver apenas 10 linhas. O mesmo vale para "não usar um índice".

    Existem muitas consultas para as quais nenhum índice é útil; suas estatísticas farão com que você tropece nelas. Por exemplo, se você indexar um 'sinalizador' (sim/não, M/F, etc.), o otimizador geralmente evitará o índice e simplesmente examinará a tabela -- porque é mais eficiente fazer isso.

    "Primeira mesa". A menos que você esteja olhando para o EXPLAIN, é difícil prever qual tabela será vista "primeiro". Mesmo a existência de LEFTnão prediz conclusivamente a ordem das tabelas.

    Qual é o seu objetivo, afinal? O objetivo principal, na minha opinião, é encontrar e corrigir consultas que estão atrapalhando o sistema. Para tanto, desejo uma lista de consultas, ordenadas pelo tempo total decorrido (número de ocorrências vezes tempo médio). Um que é fornecido com muita eficiência por

    long_query_time = 1
    turn on slowlog
    wait a day
    use one of these to get the list:
        mysqldumpslow -s t
        pt-query-digest
    

    Em seguida, obtenho EXPLAINe SHOW CREATE TABLEpara as primeiras consultas e trabalho nelas.

    Se você quiser ver a 'mudança ao longo do tempo', registre o 'tempo total' para as piores consultas e veja se elas ficam melhores ou piores no próximo mês.

    Você pode descobrir que algumas das piores consultas não são SELECTs.

    • 4

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve