我有一个像这样的SQL查询:
SELECT * FROM table WHERE field IN (a,b,c,d,e,f,g,h....)
此处in()子句中的列表大小可能多达2000个,该表是在SybaseIQ中创建的视图。据我所知,我无法在视图中创建索引。 那么有没有其他可能的方法来优化此查询?
我现在通过谷歌找到了什么:
提前致谢。
答案 0 :(得分:0)
如果您有足够的权限,请尝试在您正在使用的视图上创建实体化视图,或者将现有视图修改为物化视图本身。简单来说,物化视图是表和视图之间的混合。使用物化视图,您可以在列上创建索引,缓存结果而不是每次都计算。您可能希望检查物化视图对普通视图/表的限制。
答案 1 :(得分:0)
假设它是Sybase并且您可以创建临时表,那么这些行中的某些内容应该有助于提高性能:
CREATE TABLE #In_List
([Code] varchar(1))
;
INSERT INTO #In_List
([Code])
VALUES
('d'),
('e'),
('k'),
('p'),
('r')
;
CREATE CLUSTERED INDEX IDX_In_List_Code ON #In_List([Code])
;
select
*
from My_Table
inner join #In_List on my_table.code = #in_list.code
;
注意:这只是在SQL Server 2008(using this SQLFiddle)
上试用过