Deux SQL pour trier la date d'horodatage
-
13-12-2019 - |
Question
J'ai 98W lignes de données.Quand je veux trier mes données avec pub_time, j'ai trouvé un intérêt d'intérêt.
Voici le SQL:
select *
from t_p_blog_article_info t
order by t.pub_time desc
Cela coûte 19 ans.
select *
from t_p_blog_article_info t
where t.pub_time > to_date( '1900-01-01 01:00:00', 'yyyy-mm-dd hh24:mi:ss ')
order by t.pub_time desc
Cela coûte 0,2s.
Je veux savoir, pourquoi?
La solution
Vous avez probablement un index sur pub_time sur votre table.
Par conséquent, la deuxième requête peut utiliser cet index pour ne renvoyer que ces enregistrements avec des dates non nulles après la date spécifiée, alors que la première requête doit interroger toute la table.
Autres conseils
Il existe une gamme de possibilités. Vous pouvez filtrer un grand nombre de lignes avec des dates invalides / nulles dans PUB_TIME, mais je doute que vous ne voudriez pas remarquer / mentionner un nombre important de ceux-ci.
Les trois choses qui sortent dans mon esprit sont les suivantes:
1 - vous avez un index ou un index composite impliquant pub_time, et la restriction de votre clause où la clause est déclenchant l'utilisation d'un chemin d'accès différent
3 - similaire au premier point, l'optimiseur pourrait simplement sélectionner un meilleur chemin d'accès basé uniquement sur les implications de la clause WHERE. Donner peut-être l'indice que les valeurs nulles / invalides ne devront pas être manipulées sont suffisantes - votre système pourrait éviter une ou plusieurs analyses de table complètes à éliminer invalide / null pub_times.
identifier les raisons des choses comme ceci devient rapidement une entreprise empirique - il est difficile pour moi de dire plus sans connaître votre plate-forme et votre version. À partir de la balise, je suppose que vous utilisez Oracle, auquel cas vous devriez pouvoir utiliser une forme de "Expliquer la requête" ou "Expliquer le plan" pour obtenir un meilleur sentiment de ce qui se passe. Pour plus d'informations sur Oracle Optimizer, voir http://docs.oracle .com / cd / b10500_01 / serveur.920 / a96533 / optimops.htm (ceci est pour Oracle 9i V9.2, mais il a une explication décente des concepts indépendants de la version)