gpt4 book ai didi

mysql - 分析查询mysql

转载 作者:可可西里 更新时间:2023-11-01 07:12:57 24 4
gpt4 key购买 nike

我有一个问题,关于如何分析查询以了解其性能(好或坏)。我搜索了很多,得到如下内容:

SELECT count(*) FROM users; => 很多专家都说不好。

SELECT count(id) FROM 用户; => 很多专家都说好。

请看表格:

+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| userId | int(11) | NO | PRI | NULL | auto_increment |
| f_name | varchar(50) | YES | | NULL | |
| l_name | varchar(50) | YES | | NULL | |
| user_name | varchar(50) | NO | | NULL | |
| password | varchar(50) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
| active | char(1) | NO | | Y | |
| groupId | smallint(4) | YES | MUL | NULL | |
| created_date | datetime | YES | | NULL | |
| modified_date | datetime | YES | | NULL | |
+---------------+-------------+------+-----+---------+----------------+

但是当我尝试为此使用 EXPLAIN 命令时,我得到了结果:

EXPLAIN SELECT count(*) FROM `user`;

+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | user | index | NULL | groupId | 3 | NULL | 83 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)

EXPLAIN SELECT count(userId) FROM user;

+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | user | index | NULL | groupId | 3 | NULL | 83 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)

所以,对我来说第一件事:我可以理解为相同的性能吗?


P/S: MySQL版本是5.5.8

最佳答案

不,你不能。 Explain 并没有反射(reflect) mysql 完成的所有工作,它只是为您提供了一个如何执行的计划。

特别是 count(*)count(id)。第一个总是不比第二个慢,在某些情况下它更快。

count(col) 语义是 非空值的数量,而 count(*) 是 - 行数。

可能 mysql 可以通过重写成 count(*) 来优化 count(col) 以及 id 是一个 PK 因此不能 NULL(如果不是 - 它查找 NULLS,这并不快),但我仍然建议您在这样的情况下使用 COUNT(*)例。

另外 - 内部进程依赖于使用的存储引擎。对于 myisam,两种情况下返回的预先计算的行数(只要您不使用 WHERE)。

关于mysql - 分析查询mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6757963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com