我的查询有一个棘手的问题,我无法找出它为什么表现如此糟糕。
请参阅以下查询和查询时间(使用HeidiSQL):
tab1
=>行:57.879查询时间:0.063秒。 (+ 0.328秒网络)
说明:
SELECT p.TID, a.TID
FROM characters AS p JOIN account a ON p.AccountId = a.TID;
这很快但是一旦我从表+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+--------------------------+
| 1 | SIMPLE | a | index | TID | WebAccountId | 5 | NULL | 21086 | Using index |
| 1 | SIMPLE | p | ref | AccountId | AccountId | 5 | dol.a.TID | 1 | Using where; Using index |
+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+--------------------------+
中选择VARCHAR(255)字段,它就变得非常慢。查看网络时间。
characters
=>行:57.879查询时间:0.219秒。 ( + 116.234秒网络)
SELECT p.TID, a.TID, p.LastName
FROM characters AS p JOIN account a ON p.AccountId = a.TID;
查询时间仍然不错,但网络时间难以忍受。
有人可能认为它是由+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+-------------+
| 1 | SIMPLE | a | index | TID | WebAccountId | 5 | NULL | 21086 | Using index |
| 1 | SIMPLE | p | ref | AccountId | AccountId | 5 | dol.a.TID | 1 | Using where |
+----+-------------+-------+-------+---------------+--------------+---------+-----------+-------+-------------+
的转移造成的,但是看到了没有连接的查询
p.LastName
=>行:57.881查询时间:0.063秒。 ( + 0.578秒网络)
SELECT p.TID, p.LastName
FROM characters AS p
知道这里发生了什么吗?我不知道如何解决这个问题。
修改 为每个查询添加了Explain输出。 如果重要,那就是mysql 5.1.72-community
Edit2:从命令行测试。性能相同。如果我查看mysql进程列表,我会看到+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
| 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 59800 | |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------+
表示执行效果不佳的查询。该查询最初用于ASP.NET Web应用程序之前,性能非常糟糕。这就是我使用HeidiSQL进行调查的原因。我肯定会排除HeidiSQL的问题。