数码资讯
SQL Server的常用提示
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在SQL Server中,有许多SQL语句的提示,本文总结一些比较常用的提示。
OPTION LOOP/MERGE/HASH JOIN提示
该提示可以改变整个SQL语句中所有JOIN的关联算法,所以请慎用!
下面语句中,我们使用OPTION(MERGE JOIN)提示,将SQL语句的两个JOIN都改为了MERGE JOIN:
SELECT * FROM [dbo].[Student] INNER JOIN [dbo].[City] ON [City].StudentID=[Student].ID INNER JOIN [dbo].[Car] ON [Car].StudentID=[Student].ID OPTION(MERGE JOIN) /* 三种JOIN的提示用法如下: OPTION(LOOP JOIN) 将SQL语句中的所有JOIN改为LOOP JOIN OPTION(MERGE JOIN) 将SQL语句中的所有JOIN改为MERGE JOIN OPTION(HASH JOIN) 将SQL语句中的所有JOIN改为HASH JOIN */
查看执行计划,我们可以发现SQL语句中的两个JOIN的确都变为MERGE JOIN了:
关联JOIN提示
上面我们看到了用OPTION提示,是改变整个SQL语句所有JOIN的关联算法,比较危险,其实我们还可以对SQL语句中的单个JOIN声明关联算法。
声明[Student]表和[City]表之间,采用LOOP JOIN:
SELECT * FROM [dbo].[Student] INNER LOOP JOIN [dbo].[City] ON [City].StudentID=[Student].ID INNER JOIN [dbo].[Car] ON [Car].StudentID=[Student].ID
执行计划如下,我们可以看到,[Student]表和[City]表之间是使用的LOOP JOIN:
声明[Student]表和[City]表之间,采用MERGE JOIN:
SELECT * FROM [dbo].[Student] INNER MERGE JOIN [dbo].[City] ON [City].StudentID=[Student].ID INNER JOIN [dbo].[Car] ON [Car].StudentID=[Student].ID
执行计划如下,我们可以看到,[Student]表和[City]表之间是使用的MERGE JOIN:
声明[Student]表和[City]表之间,采用HASH JOIN:
SELECT * FROM [dbo].[Student] INNER HASH JOIN [dbo].[City] ON [City].StudentID=[Student].ID INNER JOIN [dbo].[Car] ON [Car].StudentID=[Student].ID
执行计划如下,我们可以看到,[Student]表和[City]表之间是使用的HASH JOIN:
可以看到采用单个JOIN的提示要比使用OPTION提示灵活很多。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。