我需要增强下面的SQL脚本有更好的性能。有什么建议吗?
目的:过滤掉在Table_2中有关键字的Table_1记录。
的例子:
Table_1 have data: "xxxyyyzzz" and "aaabbbccc"
Table_2 have data: "%xxyy%"
Result: "xxxyyyzzz" will be filter out and "aaabbbccc" will be return in query.
统计:
Table_1 with 1,000,000 record
Table_2 with 2,250 record
当前结果:在800秒内返回100条记录
脚本如下:
select * from table_1
minus
select * from table_1 a
where exists
(select 1 from table_2 b
where a.field_1 like b.field_1);
你可以使用join
select * from table_1 a
inner join table_2 b on a.field_1 = b.field_1
的优化你可以通过下面的链接:http://www.codeproject.com/Articles/35665/Top-steps-to-optimize-data-access-in-SQL-Serv
这里有两点值得推荐:
- 反规范化
join
时。如果您的应用程序依赖于特定的读取来驱动它,这将非常有用。这是缩放时常用的策略。
如果Denormalization
不在考虑范围内,那么优化该查询的另一种更简单的方法是确保在运行join
和like
的列上具有索引。为like
索引列将产生巨大的影响,您将立即注意到性能的提高。此外,使用SELECT *
是非常糟糕的做法,确实会造成性能下降,通过指定您想要返回的列来更改它!
任何其他的优化,我需要一些更多的信息,关于数据,希望它帮助!