mysql 优化之COUNT(*)效率分析
刚给一个朋友解决他写的Discuz!插件的问题,说到MySQL的COUNT(*)的效率,发现越说越说不清楚,干脆写下来,分享给大家。
COUNT(*)与COUNT(COL)
网上搜索了下,发现各种说法都有:
比如认为COUNT(COL)比COUNT(*)快的;
认为COUNT(*)比COUNT(COL)快的;
还有朋友很搞笑的说到这个其实是看人品的。
在不加WHERE限制条件的情况下,COUNT(*)与COUNT(COL)基本可以认为是等价的;
但是在有WHERE限制条件的情况下,COUNT(*)会比COUNT(COL)快非常多;
具体的数据参考如下:
代码如下 | 复制代码 |
> SELECT COUNT(*) FROM cdb_posts where fid = 604; mysql> SELECT COUNT(tid) FROM cdb_posts where fid = 604; mysql> SELECT COUNT(pid) FROM cdb_posts where fid = 604; |
COUNT(*)通常是对主键进行索引扫描,而COUNT(COL)就不一定了,另外前者是统计表中的所有符合的纪录总数,而后者是计算表中所有符合的COL的纪录数。还有有区别的。
COUNT时的WHERE解决办法
顺便提下mysql的DISTINCT的关键字有很多你想不到的用处
1.在count 不重复的记录的时候能用到
比如
代码如下 | 复制代码 |
SELECT COUNT( DISTINCT id ) FROM tablename; |
就是计算talbebname表中id不同的记录有多少条
2,在需要返回记录不同的id的具体值的时候可以用
比如
代码如下 | 复制代码 |
SELECT DISTINCT id FROM tablename; |
返回talbebname表中不同的id的具体的值
3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
比如
代码如下 | 复制代码 |
SELECT DISTINCT id, type FROM tablename; |
实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样
简单说下,就是COUNT的时候,如果没有WHERE限制的话,MySQL直接返回保存有总的行数
而在有WHERE限制的情况下,总是需要对MySQL进行全表遍历。
优化总结,对于MyISAM表来说:
代码如下 | 复制代码 |
1.任何情况下SELECT COUNT(*) FROM tablename是最优选择; 2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = 'value' 这种查询; 3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = 'value' 的出现。 |

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Comment améliorer les performances en optimisant la fonction AVG dans MySQL MySQL est un système de gestion de base de données relationnelle populaire qui contient de nombreuses fonctions et fonctions puissantes. La fonction AVG est largement utilisée pour calculer des moyennes, mais comme elle doit parcourir l'ensemble des données, elle entraînera des problèmes de performances dans le cas de données à grande échelle. Cet article présentera en détail comment optimiser la fonction AVG via MySQL pour améliorer les performances. 1. Utiliser les index Les index constituent la partie la plus importante de l'optimisation MySQL.

mysql count est une fonction d'agrégation utilisée pour renvoyer le nombre de lignes correspondant aux conditions de correspondance spécifiées ; la syntaxe de la fonction count est telle que "select count(*) from user;" ce qui signifie compter tous les enregistrements, y compris NULL.

MySQL est un système de gestion de bases de données relationnelles largement utilisé dans le domaine du e-commerce. Dans les applications de commerce électronique, il est crucial d'optimiser et de sécuriser MySQL. Cet article analysera l'expérience des projets d'optimisation et de sécurité de MySQL dans les applications de commerce électronique. 1. Conception de l'architecture de base de données d'optimisation des performances : dans les applications de commerce électronique, la conception de la base de données est la clé. Une conception raisonnable de la structure des tables et de l'index peut améliorer les performances des requêtes de la base de données. Dans le même temps, l'utilisation de la technologie de fractionnement et de partitionnement des tables peut réduire la quantité de données dans une seule table et améliorer l'efficacité des requêtes.

Optimisation MySQL basée sur le moteur TokuDB : amélioration des performances d'écriture et de compression Introduction : En tant que système de gestion de bases de données relationnelles couramment utilisé, MySQL est confronté à une pression d'écriture et à des exigences de stockage croissantes dans le contexte de l'ère du big data. Pour relever ce défi, le moteur TokuDB a vu le jour. Cet article explique comment utiliser le moteur TokuDB pour améliorer les performances d'écriture et de compression de MySQL. 1. Qu'est-ce que le moteur TokuDB ? Le moteur TokuDB est un moteur orienté Big Data conçu pour gérer des écritures élevées

MySQL est un système de gestion de bases de données relationnelles largement utilisé pour le développement d'applications Web et le stockage de données. Dans les applications pratiques, l'optimisation sous-jacente de MySQL est particulièrement importante, parmi laquelle l'optimisation avancée des instructions SQL est la clé pour améliorer les performances de la base de données. Cet article présentera quelques conseils et bonnes pratiques pour implémenter l'optimisation sous-jacente de MySQL, ainsi que des exemples de code spécifiques. Déterminer les conditions de requête Lors de l'écriture d'instructions SQL, vous devez d'abord définir clairement les conditions de requête et éviter d'utiliser des requêtes génériques illimitées, c'est-à-dire éviter d'utiliser « % » pour ouvrir la requête.

Comment optimiser la gestion des connexions MySQL MySQL est un système de gestion de bases de données relationnelles populaire largement utilisé dans divers sites Web et applications. Dans le processus de candidature actuel, la gestion du numéro de connexion MySQL est une question très importante, en particulier dans les situations de forte concurrence. Une gestion raisonnable du nombre de connexions peut améliorer les performances et la stabilité du système. Cet article présentera comment optimiser la gestion des numéros de connexion MySQL, y compris des exemples de code détaillés. 1. Comprendre la gestion des numéros de connexion Dans MySQL, le nombre de connexions fait référence au nombre de connexions que le système peut connecter en même temps.

La base de données MySQL est une base de données relationnelle courante. À mesure que la quantité de données dans la base de données augmente et que les exigences des requêtes changent, l'optimisation sous-jacente devient particulièrement importante. Dans le processus d'optimisation sous-jacente de MySQL, l'optimisation des instructions SQL est une tâche cruciale. Cet article abordera les techniques et principes courants d’optimisation des instructions SQL et fournira des exemples de code spécifiques. Tout d'abord, l'optimisation des instructions SQL doit prendre en compte les aspects suivants : optimisation des index, optimisation des instructions de requête, optimisation des procédures stockées et des déclencheurs, etc. Dans ces aspects, nous aurons

Comment configurer et optimiser correctement la technologie de mise en mémoire tampon à double écriture de MySQL Introduction : La technologie de mise en mémoire tampon à double écriture de MySQL est une technologie importante qui améliore la sécurité et les performances des données. Cet article explique comment configurer et optimiser correctement la technologie de mise en mémoire tampon à double écriture de MySQL pour mieux protéger les données et améliorer les performances de la base de données. 1. Qu'est-ce que la technologie de mise en mémoire tampon à double écriture ? La technologie de mise en mémoire tampon à double écriture est une technologie d'optimisation des E/S de MySQL. Elle peut réduire considérablement le nombre d'opérations d'E/S sur disque et améliorer les performances d'écriture de la base de données. Lorsque MySQL effectue une opération d'écriture, commencez par
