Azure SQL如何检查分区逻辑

zd287kbt  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个表,我已经用day对它进行分区,我的表

CREATE TABLE test
(
    date DATE,
     /// other fields
   
) on dailyPartitionScheme(date)

当我进行查询时

Select * from test where date = {d '2023-05-30'}

它会去各自的分区或它会扫描整个表?我如何验证它正在扫描哪个分区?
我还有三个过滤器,将在我所有的查询,即dep_ididlast_seen
我应该在这3个字段上创建聚集索引以获得最佳查询性能吗?我是否需要将date也包含在索引中?

bcs8qyzn

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。

CREATE TABLE Day_table(
    dep_id INT,
    id INT,
    last_seen DATE,
    data VARCHAR(50),
    day_of_week VARCHAR(20)
);

使用查询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,输入要跟踪的查询,例如:

Like '%SELECT * FROM Day_table WHERE last_seen = {d ''2023-05-30''}%'

关于聚集索引,您可以使用3个字段以获得更好的性能。我已经为表应用了clustred索引

CREATE CLUSTERED INDEX IDX_Clust_Index_Day_table
ON Day_table (dep_id, id, last_seen);

SELECT *
FROM Day_table
ORDER BY dep_id, id, last_seen;

相关问题