何时使用聚集索引或非聚集索引
下面的表总结了何时使用聚集索引或非聚集索引(很重要)。
动作描述
|
使用聚集索引
|
使用非聚集索引
|
列经常被分组排序
|
应
|
应
|
返回某范围内的数据
|
应
|
不应
|
一个或极少不同值
|
不应
|
不应
|
小数目的不同值
|
应
|
不应
|
大数目的不同值
|
不应
|
应
|
频繁更新的列
|
不应
|
应
|
外键列
|
应
|
应
|
主键列
|
应
|
应
|
频繁修改索引列
|
不应
|
应
|
1、用聚合索引比用不是聚合索引的主键速度快
2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下
3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个
4 、日期列不会因为有分秒的输入而减慢查询速度
二、改善SQL语句
1、Like语句是否属于SARG取决于所使用的通配符的类型,原因是通配符%在字符串的开通使得索引无法使用。
2、or 会引起全表扫描
3、非操作符、函数引起的不满足SARG形式的语句
4、IN 的作用相当与OR
5、尽量少用NOT
6、exists 和 in 的执行效率是一样的
7、用函数charindex()和前面加通配符%的LIKE执行效率一样
8、union并不绝对比or的执行效率高
9、字段提取要按照“需多少、提多少”的原则,避免“select *”
10、count(*)不比count(字段)慢
11、order by按聚集索引列排序效率最高
12、高效的TOP
13、同一列中内容的多少执行效率是不一样的
三、实现小数据量和海量数据的通用分页显示存储过程:
-- 获取指定页的数据
CREATE PROCEDURE pagination3
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere
else
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder
else
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder
if @strWhere != ''
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder
end
end
exec (@strSQL)
GO
四、聚集索引的重要性和如何选择聚集索引
1、您最频繁使用的、用以缩小查询范围的字段上;
2、您最频繁使用的、需要排序的字段上。
分享到:
相关推荐
存储过程是一组预先编译好的SQL语句,存储在数据库服务器中,可以按需调用执行。它的优点包括提高性能、减少网络流量、增强安全性以及简化复杂的操作。在分页查询场景下,创建一个存储过程可以有效地封装分页逻辑,...
首先,我们来看看SQL Server中的分页存储过程。这里展示的是一个名为`usp_GetPageData`的存储过程,用于获取分页数据。这个存储过程接收三个参数:`@pageSize`(每页记录数),`@pageIndex`(当前页数),以及`@...
SQL优化是数据库管理中至关...总的来说,SQL优化涉及多个方面,包括合理利用索引类型,正确选择聚集与非聚集索引,以及适当使用存储过程来优化数据处理。理解这些概念并结合实际业务场景,才能实现数据库性能的最大化。
### 数据库分页SQL语句实现 在开发MIS系统或Web应用系统时,经常会遇到对数据库进行分页处理的需求。这是因为数据量庞大时,一次性加载所有数据会给系统带来很大的负担,同时也会影响用户体验。因此,分页技术成为...
然而,要注意的是,尽管存储过程可以优化分页查询,但还有其他因素会影响性能,如索引优化、查询语句的编写、数据库设计等。在使用存储过程时,应确保已为涉及的表建立了适当的索引,以减少数据检索的时间。同时,...
在数据库设计与管理中,SQL语句的优化是一项至关重要的工作。合理的SQL优化不仅能显著提升数据处理速度,还能有效降低服务器资源消耗,从而提高整个系统的响应时间和用户体验。本文将详细介绍如何通过优化SQL语句来...
二、SQL Server的分页存储过程 在SQL Server中,可以使用`OFFSET`和`FETCH NEXT`语句实现分页。下面是一个简单的分页存储过程示例: ```sql CREATE PROCEDURE [dbo].[usp_GetPagedData] @TableName NVARCHAR(128)...
关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...
### 在SQL Server中通过SQL语句实现分页查询 #### 一、背景介绍 在数据库应用开发中,分页查询是一种常见的技术手段,用于改善用户体验并提高系统性能。特别是当数据量庞大时,一次性加载所有数据到前端不仅会导致...
### 标准SQL Server分页存储过程:深入解析与应用 在处理大量数据时,分页技术是提高数据展示效率和用户体验的关键。SQL Server提供的存储过程是实现分页功能的有效方式之一。本文将深入探讨微软C# .NET中的宠物...
在SQL编程领域,掌握高效的SQL语句优化技巧和基础知识是至关重要的。以下是对"非常好用的SQL语句优化34条+sql语句基础"这一主题的详细解析: 1. **索引优化**:索引是提高查询速度的关键。创建合适的索引(主键、...
例如,在SQL Server中,获取第10页,每页显示10条记录的真分页SQL语句可能如下: ```sql SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(ORDER BY SomeColumn) AS RowNum FROM YourTable ) AS TmpTable WHERE...
3. **减少网络流量**:调用存储过程比发送单独的SQL语句到数据库更高效,因为只需要传递存储过程名和参数,而非完整的SQL语句。 4. **安全增强**:可以设置权限,限制用户直接访问表,而通过存储过程间接操作,提高...
本资源"经过优化测试的SQL分页存储过程.rar"提供了一种经过性能测试的SQL分页解决方案,其核心在于存储过程。 存储过程是预编译的SQL语句集合,它们被存储在数据库中,可以由应用程序调用执行。这带来了诸多好处,...
### JDBC分页SQL语句详解 #### 一、引言 在数据库操作中,分页查询是非常常见且重要的一个功能。对于大型应用而言,一次性加载大量数据不仅会消耗过多资源,还可能导致用户体验下降。因此,合理地进行分页处理显得...
SQL Server 海量数据库的查询优化及分页算法...SQL Server 海量数据库的查询优化及分页算法方案是非常重要的,我们可以使用索引、视图、存储过程等技术来提高查询速度,并使用 OFFSET 和 FETCH 语句或游标来实现分页。
通过以上分析,我们可以看出,编写SQL语句实现分页通用代码需要充分理解数据库查询机制,熟练运用SQL语法,以及对性能优化有一定的了解。这样不仅可以满足用户界面的需求,还能确保系统的高效运行。
"sql分页存储过程"是指利用存储过程实现数据查询时的分页功能,这在大数据量的查询中尤为重要,因为直接一次性返回所有结果可能会消耗大量系统资源并导致响应时间过长。 分页查询是数据库中常用的一种技术,它允许...
自定义的分页存储过程可能包含优化的逻辑,例如预计算行数,缓存结果,或者根据实际情况选择不同的分页策略。这些存储过程可能在特定场景下提供更好的性能,但需要谨慎设计和测试,以确保它们在各种负载下都能稳定...
存储过程是预编译的SQL语句集合,可以在数据库服务器上执行,提供更好的性能和安全性。通过创建一个专门用于分页查询的存储过程,我们可以优化查询逻辑,减少网络传输的数据量,从而提高系统整体效率。 以下是一个...