MySQL查询需要永远执行

时间:2014-06-02 15:02:46

标签: mysql join

我是一名被认可的诺布,试图在一个非常大的专利数据库上获得一些牵引力。我目前正在尝试运行的查询如下所示:

select * from generalinfo, assignees 
where year(generalinfo.GrantDate)=2000;

Generalinfo和受理人都是超过400万条记录的表,我知道这些表是大量数据,但查询需要花费数小时才能执行(当它们因硬盘空间不足而失败时)。两个表中的关键是PatentNo,如果这有任何区别。

2 个答案:

答案 0 :(得分:3)

无论何时在谓词中使用某个函数,您的性能都会受到影响。这是因为索引不能用于谓词中的函数。另一种方法是使用BETWEEN。使用SELECT *也是不好的做法。你还应该避免使用隐式连接语法(我假设你知道你正在使用CROSS JOINgeneralinfo的每一行都连接到assignees的每一行。

SELECT [column_list]
FROM generalinfo g
CROSS JOIN assignees a
WHERE g.GrantDate BETWEEN '2000-01-01' AND '2000-12-31'

答案 1 :(得分:0)

  

Generalinfo和受让人都是超过400万条记录的表,我知道这些表是大量数据,但查询需要花费数小时才能执行(当它们因硬盘空间不足而失败时) 。两个表中的关键是PatentNo,如果这有任何区别。

以下是重点:当您在此处提及PatentNo列时,您不会在查询中使用它。如果您通过加入表格进行正确的查询,那么您将获得完全不同的结果。

此外,薄的Kermit说关于函数保持。如果您使用他的BETWEEN解决方案并在GrantDate列上有适当的索引,那么您会看到巨大的加速。