在大尺寸表上查询的最快执行时间

时间:2016-04-18 08:04:38

标签: sql sql-server sqlperformance

我需要建议如何在大尺寸表上查询最快的结果。 我使用的是SQL Server 2012,我的情况是这样的:

我有5个表包含事务记录,每个表有35百万条记录。 所有表都有14列,我需要搜索的列是GroupName,CustomerName和NoRegistration。我有一个视图,其中包含所有这些表中的5个。 GroupName,CustomerName和NoRegistration记录在每个表中都不是唯一的。

我的应用程序具有搜索这些列的功能。 查询是这样的:

按组名搜索:

SELECT DISTINCT(GroupName) FROM TransactionRecords_view WHERE GroupName LIKE ''+@GroupName+'%'

按名称搜索:

SELECT DISTINCT(CustomerName) AS 'CustomerName' FROM TransactionRecords_view WHERE CustomerName LIKE ''+@Name+'%'

按NoRegistration搜索:

SELECT DISTINCT(NoRegistration) FROM TransactionRecords_view WHERE LOWER(NoRegistration) LIKE LOWER(@NoRegistration)+'%'

我的问题是如何才能实现最快的搜索执行时间? 根据我的情况,每次我搜索,都需要3到5分钟。

我的想法是让一个新表包含来自所有5个表的GroupName,CustomerName和NoRegistration的不同。

我的想法是让执行时间更快吗?或任何其他想法?

谢谢

编辑:

这是查看" TransactionRecords_view"

的查询
CREATE VIEW TransactionRecords_view
AS  
SELECT * FROM TransactionRecords_1507
UNION ALL
SELECT * FROM TransactionRecords_1506
UNION ALL
SELECT * FROM TransactionRecords_1505
UNION ALL
SELECT * FROM TransactionRecords_1504
UNION ALL
SELECT * FROM TransactionRecords_1503

3 个答案:

答案 0 :(得分:3)

您必须显示TransactionRecords_view的sql。你有索引吗? NoRegistration列的整理是什么?粘贴每个查询的实际执行计划。

答案 1 :(得分:1)

好的,所以你不需要制作那些新表。如果您根据这些字段创建非聚集索引,它将(实际上)执行您之后的操作。索引将仅存储您指定的列的数据,而不是整个表。但请注意,索引非常适合辅助SELECT语句,但会对任何写语句(INSERT,UPDATE等)产生负面影响。

接下来,您希望在启用实际执行计划的情况下运行查询。这将向您展示优化器如何决定运行每个查询(在后端)。这里是否有任何特殊问题,是否有任何步骤占用了整个运营商的成本?关于youtube的执行计划有很多很棒的教学视频,如果你以前没有看过exe计划,请查看它们。

答案 2 :(得分:0)

您是否尝试检查实际执行计划中是否缺少索引?

此外,当您在varchar上使用子句时,我已经听说过全文搜索..也许它对您有用:

https://msdn.microsoft.com/en-us/library/ms142571(v=sql.120).aspx