一个复杂的select 如果没有limit,直接结束, 查询过程中会导致 copy to tmp table
如果设置一个很大的limit 例如: limit 0, 100000 则直接输出结果
比不带limit 的语句要快很多, 我这里有个sql执行时间 40秒 对 16分钟的比例是不是哪里不对, 为什么出现这个现象? 高人给解答一下
如果设置一个很大的limit 例如: limit 0, 100000 则直接输出结果
比不带limit 的语句要快很多, 我这里有个sql执行时间 40秒 对 16分钟的比例是不是哪里不对, 为什么出现这个现象? 高人给解答一下
命令行执行这个sql, 在另外的窗口 show processlist, 手动刷新
有limit的sql看不到copy to tmp table
没有limit的copy to tmp table好长时间
直接没有limit就需要16分钟, 这个只算了一次.
另: 两个sql我都order了group的字段,力争速度的干扰做到最小
mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec)mysql> select count(*) from foo;
+----------+
| count(*) |
+----------+
| 9 |
+----------+
1 row in set (0.00 sec)mysql> show profiles;
+----------+------------+--------------------------+
| Query_ID | Duration | Query |
+----------+------------+--------------------------+
| 1 | 0.00021300 | select count(*) from foo |
+----------+------------+--------------------------+
1 row in set (0.00 sec)mysql> show profile for query 1;
+--------------------+----------+
| Status | Duration |
+--------------------+----------+
| starting | 0.000084 |
| Opening tables | 0.000020 |
| System lock | 0.000008 |
| Table lock | 0.000013 |
| init | 0.000020 |
| optimizing | 0.000010 |
| executing | 0.000019 |
| end | 0.000006 |
| query end | 0.000003 |
| freeing items | 0.000025 |
| logging slow query | 0.000002 |
| cleaning up | 0.000003 |
+--------------------+----------+
12 rows in set (0.00 sec)mysql> show profile cpu,block io for query 1;
+--------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000084 | NULL | NULL | NULL | NULL |
| Opening tables | 0.000020 | NULL | NULL | NULL | NULL |
| System lock | 0.000008 | NULL | NULL | NULL | NULL |
| Table lock | 0.000013 | NULL | NULL | NULL | NULL |
| init | 0.000020 | NULL | NULL | NULL | NULL |
| optimizing | 0.000010 | NULL | NULL | NULL | NULL |
| executing | 0.000019 | NULL | NULL | NULL | NULL |
| end | 0.000006 | NULL | NULL | NULL | NULL |
| query end | 0.000003 | NULL | NULL | NULL | NULL |
| freeing items | 0.000025 | NULL | NULL | NULL | NULL |
| logging slow query | 0.000002 | NULL | NULL | NULL | NULL |
| cleaning up | 0.000003 | NULL | NULL | NULL | NULL |
+--------------------+----------+----------+------------+--------------+---------------+
12 rows in set (0.00 sec)mysql>