Sql server SQLServer中where子句中使用函数(IS_成员)时的基数估计警告
考虑以下场景 测试数据Sql server SQLServer中where子句中使用函数(IS_成员)时的基数估计警告,sql-server,sql-server-2012,type-conversion,sql-execution-plan,Sql Server,Sql Server 2012,Type Conversion,Sql Execution Plan,考虑以下场景 测试数据 CREATE TABLE T1 ( COL1 numeric (6, 0) NOT NULL, COL2 numeric (18, 0) NOT NULL, COL3 numeric (18, 0) NOT NULL, COL4 numeric (5, 0) NOT NULL, COL5 numeric (18, 0) NOT NULL, COL6 varchar (20) NOT N
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
场景1:
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
--执行计划警告--
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
表达式中的类型转换(CONVERT_IMPLICIT(nvarchar(20),[V9WEBDB1].[V9WEBDB1].[T3].[COL10],0))可能会影响查询计划选择中的“CardinalityEstimate”
场景2
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
--执行计划警告:
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
表达式中的类型转换(CONVERT_IMPLICIT(nvarchar(20),[V9WEBDB1].[V9WEBDB1].[T3].[COL10],0))可能会影响查询计划选择中的“CardinalityEstimate”
场景3
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
执行计划警告--无
执行计划警告--无
询问:
CREATE TABLE T1 (
COL1 numeric (6, 0) NOT NULL,
COL2 numeric (18, 0) NOT NULL,
COL3 numeric (18, 0) NOT NULL,
COL4 numeric (5, 0) NOT NULL,
COL5 numeric (18, 0) NOT NULL,
COL6 varchar (20) NOT NULL,
COL7 varchar (50) NULL,
COL8 numeric (1, 0) NULL,
COL9 numeric (18, 0) NULL,
COL10 varchar (20) NULL
)
ALTER TABLE T1
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_1', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_2', '000002', 0, NULL, 'admin_group')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_3', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_4', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_5', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_6', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_7', '000002', 0, NULL, 'QABrowns')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_8', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_9', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_10', '000002', 0, NULL, 'SuperUser')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_11', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_12', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_13', '000002', 0, NULL, 'LOLCOP2')
INSERT INTO T1 VALUES (1, 2, 12, 1, 11, 'COL_14', '000002', 0, NULL, 'LOLCOP2')
SELECT T1.* from T1
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T3 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T3
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T3
INSERT INTO T3 SELECT * FROM T1 WHERE COL10 IN ('LOLCOP2','QABrowns','SuperUser')
UPDATE STATISTICS T3
SELECT T3.* from T3
WHERE IS_MEMBER( COL10)=1
SELECT * INTO T4 FROM T1 WHERE COL10 IN ('admin_group')
ALTER TABLE T4
ADD PRIMARY KEY ( COL1,COL2, COL3, COL4, COL5, COL6 )
UPDATE STATISTICS T4
SELECT T4.* from T4
WHERE IS_MEMBER( COL10)=1
在第一和第二场景中
SELECT T1.* from T1 WHERE IS_MEMBER( COL10)=1
sql给出了以下警告
表达式中的类型转换(CONVERT_IMPLICIT(nvarchar(20),[V9WEBDB1].[V9WEBDB1].[T3].[COL10],0))可能会影响查询计划选择中的“CardinalityEstimate”
但在第三种情况下
SELECT T1.* from T1 WHERE IS_MEMBER( COL10)=1
sql不会给出任何警告
COL10的数据类型是varchar(20)
服务器排序规则:SQL\u拉丁1\u通用\u CP1\u CI\u AS
1) 为什么会出现此警告?2) 如何避免上述警告 1) 为什么会出现这种警告 您的表列
col10
是varchar(20)
,但is_MEMBER()
接受sysname
作为参数,因此服务器将varchar(20)
转换为nvarchar(20)
(sysname
是nvarchar(128)
)
2) 如何避免上述警告
将您的
col10
类型更改为sysname
或至少更改为nvarchar(20)
感谢测试数据,我在sql 2016上尝试过(家中没有2012)无法重新设置此问题