C# SQL Server正在左联接上放置索引

C# SQL Server正在左联接上放置索引,c#,sql-server,performance,indexing,C#,Sql Server,Performance,Indexing,我有大约50000条记录的数据库。假设我在存储过程(使用c#+sqlserver)中有这个查询(它只是一部分): 如果我在t3.Column2之后搜索,查询速度会很慢。 如果我关注一些t1列(这里不是左连接),那么它就像一个符咒一样工作,非常快。有什么问题?我怎样才能加快速度?我试图不使用连接,但这是不可能的。 我可以在表格上放一些索引吗?在这种特殊情况下,我会尝试以下选项,看看性能是否有所提高。您也可以尝试“执行计划”以获得任何索引建议 在上创建索引 t2中的ColumnName和t3中的C

我有大约50000条记录的数据库。假设我在存储过程(使用c#+sqlserver)中有这个查询(它只是一部分):

如果我在t3.Column2之后搜索,查询速度会很慢。 如果我关注一些t1列(这里不是左连接),那么它就像一个符咒一样工作,非常快。有什么问题?我怎样才能加快速度?我试图不使用连接,但这是不可能的。
我可以在表格上放一些索引吗?在这种特殊情况下,我会尝试以下选项,看看性能是否有所提高。您也可以尝试“执行计划”以获得任何索引建议

在上创建索引

  • t2中的ColumnName和t3中的ColumnName
  • 如果上面没有帮助在t2中的ColumnName2上再添加一个索引
p.S.索引将对更新/插入/删除产生影响,更多信息


编辑-根据已编辑的问题进行更新

这将有助于了解您正在搜索的内容-什么是@arg1?t1.ColumnName或t3.ColumnName2上有索引吗?它是textbox-search参数的值,比如人名。是的,索引在t1.Id(集群)上。我认为它是自动生成的。首先,您不需要
ISNULL
。第二,在使用像这样的
时搜索文本列可能需要很多时间,您需要告诉我们更多。是的,我需要ISNULL,因为该列也可以为null,但我需要显示其他不为null的列。我需要Like,因为他只能键入整个单词的一部分,结果也应该显示出来。所以如果我只使用Select语句,性能不会有任何提高?因为我从不更新或插入任何内容(只读)。如果大部分内容都是只读的,那么添加索引肯定会提高select语句的性能。对不起,我遗漏了一些内容。你能重写你的指令吗?因为我重写了代码(我遗漏了什么)?请参阅我文章中的当前代码。谢谢你的时间,我真的很感激。谢谢,但是没有什么好改变的。你说的是创建非聚集索引,对吗?是的,非聚集索引。正如@Tzah所建议的,在您的案例中不需要ISNULL。您可以尝试删除它,如
t1.ColumnName类似于@arg1或t2.ColumnName2类似于@arg2
。。。
SELECT .... 
FROM
Table1 t1
LEFT JOIN Table2 t2 ON t1.ID=t2.ID
LEFT JOIN Table3 t3 ON t2.ColumnName=t3.ColumnName
WHERE 
ISNULL(t1.ColumnName,'') LIKE @arg1 //FAST
ISNULL(t2.ColumnName2,'') LIKE @arg2//SLOW
ISNULL(t3.ColumnName,'') LIKE @arg3 //SLOW