我是一个公认的菜鸟,试图在一个非常大的专利数据库上吸引一些关注。我当前正在尝试运行的查询如下所示:
select * from generalinfo, assignees
where year(generalinfo.GrantDate)=2000;
generalinfo和assignees都是具有超过4百万条记录的表,我知道这是很多数据,但是查询要花几个小时才能执行(当它们不会由于硬盘空间用尽而失败时)。如果有任何区别,两个表中的键都是PatentNo。
最佳答案
每当您在谓词中使用函数时,您的性能都会受到影响。这是因为不能在谓词的函数上使用索引。另一种方法是使用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'
关于mysql - MySQL查询永远需要执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23997645/