MySQL选择速度慢,即使添加了索引
对于100K行视图上的以下简单查询,处理需要25秒MySQL选择速度慢,即使添加了索引,mysql,sql,database,Mysql,Sql,Database,对于100K行视图上的以下简单查询,处理需要25秒 SELECT id FROM View_MyView LIMIT 1 该视图非常复杂,因为它连接了7个较小的表,其中大部分是较小的表。我正在努力缩短这个查询的持续时间,但我不清楚这个视图的含义。似乎当从这里涉及的主表中选择100K行时,性能很好视图有7个连接和where子句。答案是根据where子句子查询第一个select。视图对我隐藏了复杂性。您能显示EXPLAIN的输出和视图的定义吗?请显示创建视图的原始架构。您的视图是否包含阻止mys
SELECT id
FROM View_MyView
LIMIT 1
该视图非常复杂,因为它连接了7个较小的表,其中大部分是较小的表。我正在努力缩短这个查询的持续时间,但我不清楚这个视图的含义。似乎当从这里涉及的主表中选择100K行时,性能很好视图有7个连接和where子句。答案是根据where子句子查询第一个select。视图对我隐藏了复杂性。您能显示EXPLAIN的输出和视图的定义吗?请显示创建视图的原始架构。您的视图是否包含阻止mysql使用合并算法的任何列出的结构?@Shawn,原始架构非常大。解释表明了什么吗?@glutz你能把视图的代码放到sqlfiddle中并在这里发布链接吗?查看视图的定义将给我们一个很好的解决问题的机会——如果我们还可以更好地查看底层的表定义和索引定义的话。
mysql> explain select * from view_myview limit 1
+----+------+--------+--------------------------+----------+--------+----------+------+---------------------------------+
| id | table| type | possible_keys | key | keylen | ref | rows | Extra |
+----+------+--------+--------------------------+----------+--------+----------+------+---------------------------------+
| 1 | tc | ALL | PRIMARY | NULL | NULL | NULL | 16 | Using temporary; Using filesort |
| 1 | t1 | ref | PRIMARY,colr | colr | 2 | tc.id | 28 | Using where |
| 1 | ut | ref | t_id | t_id | 4 | t1.id | 1 | Using index |
| 1 | g | ref | t1_id,t2_id,sp_id,gf_id | t1_id | 4 | ut.t_id | 9 | Using where |
| 1 | gf | eq_ref | PRIMARY | PRIMARY | 2 | g.gf_id | 1 | |
| 1 | t2 | eq_ref | PRIMARY,colr | PRIMARY | 4 | g.t2_id | 1 | |
| 1 | s | eq_ref | PRIMARY | PRIMARY | 1 | g.sp_id | 1 | |
| 1 | tc2 | eq_ref | PRIMARY | PRIMARY | 1 | t2.colr | 1 | |