更新:
谢谢所有的帮助。我将总结一下答案。
从@Jayde开始,他的回答成功地将结果减少到0.09秒,并且与限制中的数字成线性关系。
选择*from(选择table1.id作为table1\u id,从table1中选择table1.id
在@Rick James中,他提到这可能是表2的问题。因为我的表2只有几列,所以我可以省略它,自己进行连接,即使是在客户端!
所以我去掉了表2,它只有0.02s!
选择表1
<代码>id作为表1\u id
来自表1
左侧连接表3
在表1
上<代码>表3\u id=表3
<代码>id其中表1
<代码>id
最后,我发现,如果我把table2从内连接改为左连接,那么所有的痛苦都消失了,它是0.03秒!
选择table1
。idastable1_id
fromtable1
的table2
。table2_id
=table2
。code>table3ontable1
。table3_id
=table3
。id
其中table1
。id
再次感谢您的帮助!
==============================
注意:我运行在内存有限的嵌入式服务器上(大约1G,足够放入所有数据,实际上是200000个数据),并使用SD卡作为存储。
选择table1.id从表1其中id
(0.01秒)
##################################################################################################################################################################################.id
(0.40秒)
##################################################################################################################################################################################.id
(0.01秒)
选择表1
<代码>id作为表1\u id
来自表1
内部连接表2
在表1
上<代码>表2\u id=表2
<代码>id左连接表3
在表1
上<代码>表3\u id=表3
<代码>id其中表1
<代码>id
(2.31秒)
选择表1
<代码>id作为表1\u id
来自表1
内部连接表2
在表1
上<代码>表2\u id=表2
<代码>id左连接表3
在表1
上<代码>表3\u id=表3
<代码>id其中表1
<代码>id
(0.03s)
正如评论所暗示的,我使用了解释,但我真的不明白解释说了什么。请帮我查一下。以下是最长的2.31秒。
+----+-------------+----------------------+--------+-------------------------------------------------------------------+---------------------------------------+---------+---------------------------------------------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------------+--------+-------------------------------------------------------------------+---------------------------------------+---------+---------------------------------------------+-------+----------------------------------------------+
| 1 | SIMPLE | table2 | index | PRIMARY,table2_id_index | table1_id_index | 4 | NULL | 1 | Using index; Using temporary; Using filesort |
| 1 | SIMPLE | table1 | ref | PRIMARY,table1_table2_id_foreign,table1_id_index | table1_table2_id_foreign | 4 | videocap.table2.id | 27222 | Using where |
| 1 | SIMPLE | table3 | eq_ref | PRIMARY | PRIMARY | 4 | videocap.table1.table3_id | 1 | Using index |
+----+-------------+----------------------+--------+-------------------------------------------------------------------+---------------------------------------+---------+---------------------------------------------+-------+----------------------------------------------+
desc表的结果
表1:
+-------------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| table2_id | int(10) unsigned | NO | MUL | NULL | |
| table3_id | int(10) unsigned | NO | MUL | 0 | |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
+-------------------------+------------------+------+-----+---------------------+----------------+
表2:
+-----------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
+-----------------+------------------+------+-----+---------------------+----------------+
表3:
+---------------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+------------------+------+-----+---------------------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| created_at | timestamp | NO | | 0000-00-00 00:00:00 | |
| updated_at | timestamp | NO | | 0000-00-00 00:00:00 | |
+---------------------------+------------------+------+-----+---------------------+----------------+
它看起来像table2有1行。那是正确的吗?每个表有多少行?
由于表2中只有一行,优化器似乎决定从一开始就把它去掉。
在所有情况下,PRIMARYKEY(id),特别是如果您使用InnoDB,对于
where table1.id < $number
order by table1.id desc
但是,如果表的大部分都有id
请记住,查询有数百万种变化。虽然我很欣赏你试图隔离查询的重要部分;但你可能会发现,将任何答案应用回“真实”查询可能会遇到其他问题。
它的性能如何?(Ooops.更正)
select *
from
( SELECT table1.id as table1_id
from table1
where table1.id < 100000
order by table1.id desc
limit 1000
) t1
inner join table2 on t1.table2_id = table2.id
left join table3 on t1.table3_id = table3.id
order by t1.id;
由于没有快速的lambda计算器,我使用上面的策略将非类型化lambda演算的术语编译为Haskell,以便快速计算它们。我对它的性能印象深刻:该程序创建了一个从到的数字列表,并在我的计算机上在不到一秒钟的时间内将它们相加。这比我预期的要快得多--只比Haskell直接等价物慢4倍--并且足以对我的目标有用。但是,请注意,为了满足类型系统的需要,我必须将函数和术语包装在fun/num构造函数下面。
所以我正在做一个需要xml模式的小项目,我对这个模式很不熟悉。 我希望能够设置模式以在两组属性之间进行选择,根据我的研究,这在XSD 1.0中是不可能的,但显然是XSD 1.1的一个特性。 目前我正在使用VisualStudio来完成我的工作,它似乎被困在XSD1.0模式中,这是有意义的,因为XSD1.1显然是一个最新的开发。 我的问题是,是否有一个插件/扩展可以让我在Visual Studio中
问题内容: 我写了一个查询来查找3月至4月美国10个最繁忙的机场。它产生所需的输出,但是我想尝试进一步优化它。 是否有任何适用于查询的HiveQL特定优化? 是适用在这里吗?我是Hive的新手,现在这是我提出的最短的查询。 表列如下: 飞机场 Flights_stats 问题答案: 按机场(内部联接)过滤,并在UNION ALL之前进行聚合,以减少传递到最终聚合简化程序的数据集。具有UNION A
我制作一个浏览器只是为了练习我的Java技能,有没有办法让我的地址栏(JTextField)比swing的默认值更大,也更弯曲。这是我的密码。 我想制作一个真正可用的浏览器,就像我想让html及其CSS页面显示一样,我还需要学习什么才能使其工作。
问题内容: 请考虑以下表格: 部 员工 编写查询以返回人员总数为4或更多的那些部门的雇员的empname和deptname列。记录应按姓氏的字母顺序返回 这是我的看法: 您将如何对此进行改进? 问题答案: 这比较短,而且执行速度可能也更快 从分组开始。您不需要内部查询中的COUNT。然后,联接两个表只是为了获得名称。 *之所以使用 *INNER JOIN, 是因为一旦计数完成,我们已经知道 员工存
问题内容: 我在实现Runnable的类中的run()中调用的方法被设计为引发异常。 但是Java编译器不允许我这样做,建议我用try / catch包围它。 问题是,通过用try / catch包围它,我使 特定的 run()无效了。我 确实 想抛出该异常。 如果我指定的run()的本身,编译器会抱怨说。 通常,我对run()不会抛出异常完全满意 。但是,在我必须具有该功能的特殊情况下。 如何解