三 创建数据测试下上面学到的理论知识
--创建表
CREATE TABLE employee
(
emp_username varchar (20),
emp_register DATETIME
)
--插入测试数据
DECLARE @startid INT
DECLARE @endid INT
SELECT @startid= 1,@endid = 100
WHILE @startid <=@endid
BEGIN
INSERT INTO employee (
emp_username,
emp_register
) VALUES (
/* emp_username - varchar (20) */ '刘'+CAST(@startid AS NVARCHAR(20)),
/* emp_register - DATETIME */ GETDATE() )
SELECT @startid =@startid +1;
END
-- 查询employee的执行计划 和 io 信息
SET STATISTICS IO ON
SELECT * FROM employee WHERE emp_username = '刘'
CREATE TABLE employee
(
emp_username varchar (20),
emp_register DATETIME
)
--插入测试数据
DECLARE @startid INT
DECLARE @endid INT
SELECT @startid= 1,@endid = 100
WHILE @startid <=@endid
BEGIN
INSERT INTO employee (
emp_username,
emp_register
) VALUES (
/* emp_username - varchar (20) */ '刘'+CAST(@startid AS NVARCHAR(20)),
/* emp_register - DATETIME */ GETDATE() )
SELECT @startid =@startid +1;
END
-- 查询employee的执行计划 和 io 信息
SET STATISTICS IO ON
SELECT * FROM employee WHERE emp_username = '刘'
查看消息输出的 IO 信息
表'employee'。(1)1扫描计数1,(2)逻辑读取1 次,(3)物理读取0 次,(4)预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
输出的信息和上面的图片讲解的是对应的
1. 执行的扫描次数 。
2. 从磁盘读取的页数。
3. 为进行查询而放入缓存的页数。
4. 预读
T_SQL transaction 语句有很多种的写法,但是决定那条语句是最优的是根据(logical reads) 逻辑读取来判断。
添加聚集索引 查询逻辑读取是否会变少
CREATE CLUSTERED INDEX Idx_emp_username ON employee (emp_username);
--然后再执行查询
SET STATISTICS IO ON
SELECT * FROM employee WHERE emp_username = '刘'
--然后再执行查询
SET STATISTICS IO ON
SELECT * FROM employee WHERE emp_username = '刘'