您的位置:首页 > 职场人生

SQL面试汇总

2018-01-07 14:26 295 查看

构建一个复合聚集索引

复合索引只适用于附加列与第一个列经常被组合查询或需要通过几个列来强制惟一性的时候。

1.在
SQL Server Management Studio
中,键入并执行以下语句在
OrderDetails
表上创建一个复合聚集索引。

CREATE UNIQUE CLUSTERED INDEX CLIDX_OrderDetails ON dbo.OrderDetails(SalesOrderID,SalesOrderDetailID)


2.现在键入以下两个
SELECT
语句。第一个语句查询
SalesOrderID
的值为指定值的行,第二个语句查询
SalesOrderDetailID
值为指定值的行。这两个列都是
CLIDX_OrderDetails
索引的索引列。按
“Ctrl+L”
来显示估计的执行计划。

SELECT * FROM dbo.OrderDetails WHERE SalesOrderID = 46999

SELECT * FROM dbo.OrderDetails WHERE SalesOrderDetailID = 14147


可以看出,在第一个搜索复合索引第一个列的值的查询中,
SQL Server
使用一个索引查找来找到特定的行。在第二个查询中,它使用一个非常昂贵的索引扫描操作。使用这个索引扫描操作是因为不可能只依据复合索引第二个列找到值,因为这个索引起初是根据第一个列来进行排序的。因此,安排复合索引中索引列的顺序是非常重要的。记住,复合索引只适用于附加列与第一个列经常被组合查询或需要通过几个列来强制惟一性的时候。

SQLServer大量数据高效率分页

以下为从大数据量表检索分页数据的有效方法 测试时,先从LargeTable表选出1000条记录分页呈现

--TIME_SEGMENT为数据表字段
declare @pagesize int--每页大小
declare @currentpage int--当前页
set @pagesize=2
set @currentpage=1

SELECT TOP (@pagesize) *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY h_job_id) AS id,COUNT(*) OVER() AS TOTAL,*
FROM h_job
where name='周一'
) as t
WHERE t.id > (@pagesize*(@currentpage-1))
order by t.id;


测试结果,百万级的没有索引的表,为5s左右.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: