为什么标量值函数似乎会导致查询在连续使用它们的次数越多,累积运行速度越慢?
我有这个表是用从第三方购买的数据构建的.
我已经删除了一些东西,以使这篇文章缩短...但只是让你了解事情是如何设置的.
CREATE TABLE [dbo].[GIS_Location](
[ID] [int] IDENTITY(1,1) NOT NULL, --PK
[Lat] [int] NOT NULL,
[Lon] [int] NOT NULL,
[Postal_Code] [varchar](7) NOT NULL,
[State] [char](2) NOT NULL,
[City] [varchar](30) NOT NULL,
[Country] [char](3) NOT NULL,
CREATE TABLE [dbo].[Address_Location](
[ID] [int] IDENTITY(1,1) NOT NULL, --PK
[Address_Type_ID] [int] NULL,
[Location] [varchar](100) NOT NULL,
[State] [char](2) NOT NULL,
[City] [varchar](30) NOT NULL,
[Postal_Code] [varchar](10) NOT NULL,
[Postal_Extension] [varchar](10) NULL,
[Country_Code] [varchar](10) NULL,
Run Code Online (Sandbox Code Playgroud)
然后我有两个查找LAT和LON的函数.
CREATE FUNCTION [dbo].[usf_GIS_GET_LAT]
(
@City VARCHAR(30),
@State CHAR(2)
) …Run Code Online (Sandbox Code Playgroud) 环境:SQL Server 2005 SP2(9.0.3077)事务性出版物(生产和测试版)
我有一种情况,我有两个不同的复制发布设置,使用一些相同的文章.这些出版物中的每一个都在不同的机器上提供订阅者.这些共享文章中的一个是表格.在一个固定的时间间隔内,该表中的许多记录都会变老并且不再需要.此时,将调用删除记录的存储过程.
为了节省资源并改善订阅者的延迟时间,我已将此存储过程的replicate属性设置为"执行存储过程"而不是默认的"仅存储过程定义".这样,当存储过程删除2,000,000多条记录时,这些记录不会复制到订阅者.而是复制存储过程的执行,并执行订阅者上相同的复制存储过程,并删除相同的2,000,000多行.
我遇到的问题是我的第二份出版物.我不需要这种类型的行为,所以我将存储过程集上的article属性设置为"仅存储过程定义",并期望复制删除其他订户的行,但事实并非如此.订户的表格不断获得记录.所以要修复它我将Article属性设置为"Execution ..."并称之为好.这可能是最佳的解决方案,因此beta与生产匹配,但它仍然感觉像一个kludge,因为出版物属性应该彼此独立工作.
问题:为什么"执行存储过程"文章属性优先并应用于其他出版物,即使它在另一个出版物中设置为"仅存储过程定义"?