2015-03-12 1 views
2

je suis tombé sur ce article qui indique que cette requête:Y a-t-il des SGBDR classiques ("bases de données") qui n'optimisent PAS sur l'opérateur symbolique ">" ou "<"?

SELECT * FROM TABLE WHERE COLUMN > 16 

est plus lent que

SELECT * FROM TABLE WHERE COLUMN >= 17 

La raison est que

[la requête] n'est pas optimisée en au fait que le SGBD aura pour rechercher la valeur 16 ALORS balayer vers l'avant jusqu'à la valeur 16

La deuxième requête est plus rapide parce que

De cette façon, le SGBD peut sauter tout de suite à [la] valeur

J'ai du mal à croire que SGBDR traditionnels de (Postgres, Oracle, MySQL/maria, DB2, etc) sont vraiment "stupides" - ne sont-ils pas assez intelligents pour optimiser eux-mêmes cette différence? Est-ce que quelqu'un peut confirmer ou infirmer que cela est (ou n'est pas) le cas sur la plupart des SGBDR classiques?

+0

hmm .. peut-être je aurais dû mettre cela sur http://programmers.stackexchange.com/? – Marco

+0

Je doute que ce soit un problème commun. – jarlh

+0

@Marco. . . Cela ne ressemble pas à un comportement normal. Vraisemblablement, la déclaration se réfère à l'utilisation d'un index. Trouver la valeur suivante après '16' n'est vraiment pas si difficile quand on utilise un index. Peut-être que le '=' pourrait sauver quelques cycles de calcul, mais une telle optimisation serait submergée par presque toute autre considération. Il y a plusieurs autres inexactitudes dans ce blog. –

Répondre

1

Il semble que dans le serveur SQL >, >=, <, <= ont les mêmes performances. Tiré de cette article.


Voici les principaux opérateurs utilisés dans la clause WHERE, commandés par leur performance . Ces opérateurs en haut produiront des résultats plus rapides que ceux listés en bas.

=  
>, >=, <, <=  
LIKE  
<>