Maison développement back-end tutoriel php 这一条SQL如何优化

这一条SQL如何优化

Jun 13, 2016 am 10:36 AM
sql where

这一条SQL怎么优化

SQL code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->select * from dx_gd_goods where g_label >= 100101000 and g_label
Copier après la connexion
Copier après la connexion


上面的SQL语句执行要2秒。太慢了。

我如果变成这样,但是实际需求是一定要排序的。
SQL code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->select * from dx_gd_goods where g_label >= 100101000 and g_label
Copier après la connexion
Copier après la connexion


这样做后,程序只需要0.16秒就可以返回

我怎样做才能到排序后,执行的时间又短呢。

------解决方案--------------------
g_label 和 g_likenum 字段都建立索引没有
------解决方案--------------------
我觉得你的测试不准确,没理由相差这么大。你是多次运行过取平均值吗?
------解决方案--------------------
g_likenum 没有用到索引
------解决方案--------------------
前一个语句执行慢,后一个执行快,我猜测原因是这样的:后者在扫描数据记录的时候,找到符合 where 条件的记录,只要凑够 30 个就好了,即使 g_label 没有索引,只要符合条件的记录在总的数据集合里所占的比例不是特别低,也没有什么问题;而前者则不行,它必须找到符合 where 条件的所有记录,然后再按照 g_likenum 排序,才能取出前面的 30 个,这个过程如果没有适当索引的帮助,很可能导致全表扫描。

解决问题的办法当然也只能是设置适当的索引。但是什么样的索引是适当的,还跟你的 dx_gd_goods 表中的数据分布特点有关系。比如,当符合 where 条件的记录所占的比例足够高,而 g_likenum 字段的区分度也很高的情况下,(g_likenum) 这样的索引就已经很好了;但如果符合 where 条件的记录只是相对很少一部分,那么 (g_label, g_likenum) 这样的索引可能效果会更好一点。

另外,有的时候数据库(比如 mysql)可能并不一定按你的想像来使用索引,所以要用 explain 进行考察,必要时可以通过 index hint 等手段进行干预。


————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
------解决方案--------------------
g_likenum 是不是数据很集中的那种?enum?
------解决方案--------------------
这是前段的sql吗?如果是的话你可以给g_label 和 g_likenum建立个符合索引,你的mysql是什么版本?可以的话创建分区呢
------解决方案--------------------
探讨

哈哈,
还好,刚才强制了一下索引,速度还可以接受了,0.7秒就返回了。
虽然不是很好,但是还可以接受引用:

这是前段的sql吗?如果是的话你可以给g_label 和 g_likenum建立个符合索引,你的mysql是什么版本?可以的话创建分区呢

------解决方案--------------------
在 g_label 和 g_likenum 上建联合索引
------解决方案--------------------
探讨
有点大

------解决方案--------------------
探讨

唠叨大哥,
我有这样的语句三条,

[code=SQL]
select * from dx_gd_goods where g_label > = 100101000 and g_label
select * from dx_……

------解决方案--------------------
探讨

哦,
我现在没有建立复合,我是分开建的。
引用:

引用:
有点大


能不能建分区呢,只是你已经给这两个字段建立复合索引了,不知道建分区效果是否明显了,不过你可以尝试先,如果没啥大效果再把分区删除了

------解决方案--------------------
那也就只能这样了,再优化就是大动作了
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Quelle est la différence entre HQL et SQL dans le framework Hibernate ? Apr 17, 2024 pm 02:57 PM

HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).

Utilisation de l'opération de division dans Oracle SQL Utilisation de l'opération de division dans Oracle SQL Mar 10, 2024 pm 03:06 PM

"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.

Comparaison et différences de syntaxe SQL entre Oracle et DB2 Comparaison et différences de syntaxe SQL entre Oracle et DB2 Mar 11, 2024 pm 12:09 PM

Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.

Que signifie l'attribut d'identité dans SQL ? Que signifie l'attribut d'identité dans SQL ? Feb 19, 2024 am 11:24 AM

Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.

Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis Feb 26, 2024 pm 07:48 PM

Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati

Comment Java utilise-t-il l'intercepteur de pilote MySQL pour implémenter des calculs SQL fastidieux ? Comment Java utilise-t-il l'intercepteur de pilote MySQL pour implémenter des calculs SQL fastidieux ? May 27, 2023 pm 01:10 PM

Contexte : L'un des besoins de l'entreprise est que le composant de journal de suivi des liens existant de l'entreprise doit prendre en charge l'impression du temps d'exécution SQL de MySQL. La méthode courante pour implémenter le suivi des liens consiste à implémenter l'interface d'intercepteur ou l'interface de filtre fournie par un framework ou un outil tiers. MySQL ne fait pas exception. En fait, il implémente simplement l'interface d'interception pilotée par MySQL. Il existe différentes versions de canaux qui implémentent spécifiquement MySQL, et les interfaces d'intercepteur des différentes versions sont différentes, vous devez donc implémenter l'intercepteur de réponse en fonction des différentes versions du pilote MySQL que vous utilisez. Ensuite, nous présenterons les canaux MySQL 5. et 6 respectivement. Implémentation de la version 8. MySQL5 est implémenté ici en utilisant la version du canal MySQL 5.1.18 comme exemple pour implémenter Statem

Comment résoudre l'erreur 5120 dans SQL Comment résoudre l'erreur 5120 dans SQL Mar 06, 2024 pm 04:33 PM

Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.

Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? Dec 17, 2023 am 08:41 AM

Comment utiliser les instructions SQL pour l'agrégation de données et les statistiques dans MySQL ? L'agrégation des données et les statistiques sont des étapes très importantes lors de l'analyse des données et des statistiques. En tant que puissant système de gestion de bases de données relationnelles, MySQL fournit une multitude de fonctions d'agrégation et de statistiques, qui peuvent facilement effectuer des opérations d'agrégation de données et de statistiques. Cet article présentera la méthode d'utilisation des instructions SQL pour effectuer l'agrégation de données et les statistiques dans MySQL, et fournira des exemples de code spécifiques. 1. Utilisez la fonction COUNT pour compter. La fonction COUNT est la plus couramment utilisée.

See all articles