【发布时间】:2014-09-11 17:16:28
【问题描述】:
我有大约 50.000 条记录的数据库。假设我在存储过程中有这个查询(它只是一部分)(使用 c# + sqlserver):
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
如果我在 t3.Column2 之后搜索,查询速度很慢。 如果我照顾一些 t1 列(其中没有左连接),那么它就像一个魅力,非常快。问题是什么?我怎样才能加快这个速度?我试图不使用连接,但这是不可能的。 我可以在表格上放一些索引吗?在这种特殊情况下是哪一个?
【问题讨论】:
-
了解您要搜索的内容会有所帮助 - @arg1 是什么? t1.ColumnName 或 t3.ColumnName2 上是否有任何索引?
-
这是文本框的值 - 搜索参数,比如说人名。
-
是的,索引位于 t1.Id(集群)上。我认为它是自动生成的。
-
首先,您不需要
ISNULL。第二,在使用LIKE时搜索文本列可能需要很多时间,您需要告诉我们更多信息。 -
是的,我需要 ISNULL,因为该列也可以为空,但我需要显示其他不为空的列。我需要 Like 因为他可以只输入整个单词的一部分,结果也应该显示出来。
标签: c# sql-server performance indexing