查询大尺寸的最快执行时间 table

Fastest execution time for querying on Big size table

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

我有5个tables包含交易记录,每个table有3500万条记录。 所有 table 都有 14 列,我需要搜索的列是 GroupName、CustomerName 和 NoRegistration。我有一个包含所有这些 table 中的 5 个的视图。 GroupName、CustomerName 和 NoRegistration 记录不是每个 tables 唯一的。

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

按群组名称搜索:

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分钟

我的想法是制作一个新的 tables,其中包含与所有 5 个 tables 不同的 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

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

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

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

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

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

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