我是一名被认可的诺布,试图在一个非常大的专利数据库上获得一些牵引力。我目前正在尝试运行的查询如下所示:
select * from generalinfo, assignees
where year(generalinfo.GrantDate)=2000;
Generalinfo和受理人都是超过400万条记录的表,我知道这些表是大量数据,但查询需要花费数小时才能执行(当它们因硬盘空间不足而失败时)。两个表中的关键是PatentNo,如果这有任何区别。
答案 0 :(得分:3)
无论何时在谓词中使用某个函数,您的性能都会受到影响。这是因为索引不能用于谓词中的函数。另一种方法是使用BETWEEN
。使用SELECT *
也是不好的做法。你还应该避免使用隐式连接语法(我假设你知道你正在使用CROSS JOIN
,generalinfo
的每一行都连接到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
列上有适当的索引,那么您会看到巨大的加速。