我有一个表,我已经用day
对它进行分区,我的表
CREATE TABLE test
(
date DATE,
/// other fields
) on dailyPartitionScheme(date)
当我进行查询时
Select * from test where date = {d '2023-05-30'}
它会去各自的分区或它会扫描整个表?我如何验证它正在扫描哪个分区?
我还有三个过滤器,将在我所有的查询,即dep_id
,id
和last_seen
我应该在这3个字段上创建聚集索引以获得最佳查询性能吗?我是否需要将date
也包含在索引中?
1条答案
按热度按时间bcs8qyzn1#
我的理解是,当你查询示例时:
SELECT * FROM Day_table WHERE last_seen = {d '2023-05-30'}
只扫描**“last_seen”列中date '2023-05- 30'对应的分区。如果要验证查询扫描的是哪个分区,可以在SQL Server Management Studio(SSMS)**中使用。SQL Server Profiler工具,用于捕获对数据库执行的查询,并确定正在访问哪个分区。
例如,我创建了一个名为Day_table的表。下面的Schema。
使用查询Select last_seen from Day_table where
last_seen = {d '2023-05-30'} and Select * from Day_table where last_seen = {d '2023-05-30'}
x1c 0d1x我想看看它正在扫描哪个分区。
要查看此信息,您可以转到sql Profiler InSSMS Tools Tab>SQL server>Connect to your SQL server with authenication>Events Selection>
选择“SQL:BatchCompleted”和“RPC:Completed”事件。
点击【列过滤】按钮,设置查询过滤。
在“列过滤器”窗口中,从“列名”下拉列表中选择“TextData”。
设置过滤运算符为Like,输入要跟踪的查询,例如:
关于聚集索引,您可以使用3个字段以获得更好的性能。我已经为表应用了clustred索引