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 / 7983
Accepted
transistor1
transistor1
Asked: 2011-11-17 08:14:07 +0800 CST2011-11-17 08:14:07 +0800 CST 2011-11-17 08:14:07 +0800 CST

"WHERE 1=1" geralmente tem impacto no desempenho da consulta?

  • 772

Recentemente, vi a pergunta "onde 1 = 1 instrução" ; uma construção SQL que usei frequentemente na construção de SQL dinâmico em um esforço para escrever um código mais limpo (da perspectiva da linguagem do host).

De um modo geral, essa adição a uma instrução SQL afeta negativamente o desempenho da consulta? Não estou procurando uma resposta em relação a um sistema de banco de dados específico (porque o usei em DB2, SQL Server, MS-Access e mysql) - a menos que seja impossível responder sem entrar em detalhes.

performance optimization
  • 3 3 respostas
  • 12577 Views

3 respostas

  • Voted
  1. Best Answer
    JNK
    2011-11-17T08:31:02+08:002011-11-17T08:31:02+08:00

    Todos os principais RDBMS, até onde eu sei, construíram avaliações constantes. Isso deve ser avaliado instantaneamente em qualquer um deles.

    • 24
  2. Mike Walsh
    2011-11-17T10:29:23+08:002011-11-17T10:29:23+08:00

    De uma perspectiva do SQL Server, se você estiver fazendo o WHERE 1=1possível para permitir a passagem dinâmica de parâmetros e ignorar a avaliação de um parâmetro, sugiro que leia alguns artigos do SQL Server MV Erland Sommarskog. Sua abordagem elimina a necessidade de fazer alguns outros truques dentro do SQL dinâmico (como a WHERE Column = Columnconstrução ou o uso de uma WHERE (Col = Val OR 1=1) and (Col2 = Val2 OR 1=1)construção). O 1 = 1 não deve causar problemas de desempenho como @JNK mencionou (marquei a resposta dele com +1 e essa é a que deve ser aceita), acho que você encontrará algumas boas dicas no artigo de Erland por aí SQL dinâmico e você também verá que ele ainda usa aquele 1=1para os casos em que nenhum parâmetro é passado, mas ele os evita para parâmetros individuais que não são passados, ele simplesmente não

    • SQL Server 2008 SP1 CU5 e superior
    • SQL Server 2000 - 2008 RTM
    • 8
  3. Dalibor Karlović
    2011-11-18T00:53:36+08:002011-11-18T00:53:36+08:00

    Com o MySQL, você pode verificar, executando EXPLAIN EXTENDED e depois SHOW WARNINGS para ver a consulta real. tl;dr: ele é otimizado.

    mysql> use test
    Database changed
    mysql> create table test1(val int);
    Query OK, 0 rows affected (0.19 sec)
    
    mysql> explain extended select * from test1 where val > 11 and 1 = 1;
    +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
    +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
    |  1 | SIMPLE      | test1 | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | Using where |
    +----+-------------+-------+------+---------------+------+---------+------+------+----------+-------------+
    1 row in set, 1 warning (0.00 sec)
    
    mysql> show warnings;
    +-------+------+--------------------------------------------------------------------------------------------+
    | Level | Code | Message                                                                                    |
    +-------+------+--------------------------------------------------------------------------------------------+
    | Note  | 1003 | select `test`.`test1`.`val` AS `val` from `test`.`test1` where (`test`.`test1`.`val` > 11) |
    +-------+------+--------------------------------------------------------------------------------------------+
    1 row in set (0.01 sec)
    
    • 6

relate perguntas

  • Existe um ganho de desempenho ao manipular dados com procedimentos armazenados em vez de alimentá-los em funções após a recuperação?

  • Como você ajusta o MySQL para uma carga de trabalho pesada do InnoDB?

  • Como determinar se um Índice é necessário ou necessário

  • Onde posso encontrar o log lento do mysql?

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

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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