金沙澳门官网网址-澳门金沙官网登录

金沙澳门官网网址拥有大量的原创内容,澳门金沙官网登录提供最权威、快速、全面、专业的报道,所以金沙澳门官网网址注册送彩金就相当于直接送现金了,享受最尊贵的贵宾服务。

字典的正文部分本身就是一个目录,虽然查询优

2019-09-27 04:59栏目:金沙澳门官网
TAG:

上面的这个存储过程是一个通用的存储过程,其注释已写在其中了。在大数据量的情况下,特别是在查询最后几页的时候,查询时间一般不会超过9秒;而用其他存储过程,在实践中就会导致超时,所以这个存储过程非常适用于大容量数据库的查询。笔者希望能够通过对以上存储过程的解析,能给大家带来一定的启示,并给工作带来一定的效率提升,同时希望同行提出更优秀的实时数据分页算法。

1、**Like语句是否属于**SARG取决于所使用的通配符的类型
如:name like ‘张%’ ,这就属于SARG
而:name like ‘%张’ ,就不属于SARG。
原因是通配符%在字符串的开通使得索引无法使用。
2、**or 会引起全表扫描
  Name=’张三’ and 价格>5000 符号SARG,而:Name=’张三’ or 价格>5000 则不符合SARG。使用or会引起全表扫描。
3、非操作符、函数引起的不满足**SARG形式的语句
  不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:
ABS(价格)<5000
Name like ‘%三’
有些表达式,如:
WHERE 价格*2>5000
SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为:
WHERE 价格>2500/2
但我们不推荐这样使用,因为有时SQL SERVER不能保证这种转化与原始表达式是完全等价的。
4、**IN 的作用相当与**OR
语句:
Select * from table1 where tid in (2,3)

Select * from table1 where tid=2 or tid=3
是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。
5、尽量少用**NOT 6、exists 和 in 的执行效率是一样的
  很多资料上都显示说,exists要比in的执行效率要高,同时应尽可能的用not exists来代替not in。但事实上,我试验了一下,发现二者无论是前面带不带not,二者之间的执行效率都是一样的。因为涉及子查询,我们试验这次用SQL SERVER自带的pubs数据库。运行前我们可以把SQL SERVER的statistics I/O状态打开:
(1)select title,price from titles where title_id in (select title_id from sales where qty>30)
该句的执行结果为:
表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。
表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。
(2)select title,price from titles 
  where exists (select * from sales 
  where sales.title_id=titles.title_id and qty>30)
第二句的执行结果为:
表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。
表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。
我们从此可以看到用exists和用in的执行效率是一样的。
7、用函数charindex()和前面加通配符%的**LIKE执行效率一样
  前面,我们谈到,如果在LIKE前面加上通配符%,那么将会引起全表扫描,所以其执行效率是低下的。但有的资料介绍说,用函数charindex()来代替LIKE速度会有大的提升,经我试验,发现这种说明也是错误的:
select gid,title,fariqi,reader from tgongwen 
  where charindex(''刑侦支队'',reader)>0 and fariqi>''2004-5-5''
用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。
select gid,title,fariqi,reader from tgongwen 
  where reader like ''%'' + ''刑侦支队'' + ''%'' and fariqi>''2004-5-5''
用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。
8、**union并不绝对比**or的执行效率高
  我们前面已经谈到了在where子句中使用or会引起全表扫描,一般的,我所见过的资料都是推荐这里用union来代替or。事实证明,这种说法对于大部分都是适用的。
select gid,fariqi,neibuyonghu,reader,title from Tgongwen 
  where fariqi=''2004-9-16'' or gid>9990000
用时:68秒。扫描计数 1,逻辑读 404008 次,物理读 283 次,预读 392163 次。
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16'' 
union
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid>9990000
用时:9秒。扫描计数 8,逻辑读 67489 次,物理读 216 次,预读 7499 次。
看来,用union在通常情况下比用or的效率要高的多。
  但经过试验,笔者发现如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。
select gid,fariqi,neibuyonghu,reader,title from Tgongwen 
  where fariqi=''2004-9-16'' or fariqi=''2004-2-5''
用时:6423毫秒。扫描计数 2,逻辑读 14726 次,物理读 1 次,预读 7176 次。
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16'' 
union
select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-2-5''
用时:11640毫秒。扫描计数 8,逻辑读 14806 次,物理读 108 次,预读 1144 次。
9、字段提取要按照**“需多少、提多少”的原则,避免“select *”
  我们来做一个试验:
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用时:4673毫秒
select top 10000 gid,fariqi,title from tgongwen order by gid desc
用时:1376毫秒
select top 10000 gid,fariqi from tgongwen order by gid desc
用时:80毫秒
  由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。
10、count(*)不比count(字段**)慢
  某些资料上说:用*会统计所有列,显然要比一个世界的列名效率低。这种说法其实是没有根据的。我们来看:
select count(*) from Tgongwen
用时:1500毫秒
select count(gid) from Tgongwen 
用时:1483毫秒
select count(fariqi) from Tgongwen
用时:3140毫秒
select count(title) from Tgongwen
用时:52050毫秒
  从以上可以看出,如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*), SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。
11、**order by按聚集索引列排序效率最高**
  我们来看:(gid是主键,fariqi是聚合索引列):
select top 10000 gid,fariqi,reader,title from tgongwen
用时:196 毫秒。 扫描计数 1,逻辑读 289 次,物理读 1 次,预读 1527 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc
用时:4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用时:4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc
用时:173毫秒。 扫描计数 1,逻辑读 290 次,物理读 0 次,预读 0 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc
用时:156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。
  从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。

用时:156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。

用时:80毫秒

第二句的执行结果为:

注:文章来源与网络,仅供读者参考!

5、尽量少用NOT

用时:3170毫秒(提取50万条)

有些表达式,如:

1.(1)select title,price from titles where title_id in (select title_id from sales where qty>30)

是一样的,都会引起全表扫描,如果tid上有索引,其索引也会失效。

1.select gid,fariqi,neibuyonghu,title from Tgongwen

我们来看:(gid是主键,fariqi是聚合索引列):

图片 1图片 2

1.select top 10000 gid,fariqi,reader,title from tgongwen

从建表的语句中,我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。在此字段上建立聚合索引是再合适不过了。在现实中,我们每天都会发几个文件,这几个文件的发文日期就相同,这完全符合建立聚集索引要求的:“既不能绝大多数都相同,又不能只有极少数相同”的规则。由此看来,我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。

用时:6423毫秒。扫描计数 2,逻辑读 14726 次,物理读 1 次,预读 7176 次。

并在select语句后加:

10、count(*)不比count(字段)慢

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi<''2004-1-1'' order by fariqi

1.select top 10000 gid,fariqi from tgongwen order by gid desc

查询速度:60280毫秒

5000<价格

3、非操作符、函数引起的不满足SARG形式的语句

Name=’张三’

从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。

很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:

1.select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid>9990000

实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:

11、order by按聚集索引列排序效率最高

图片 3图片 4

我们前面已经谈到了在where子句中使用or会引起全表扫描,一般的,我所见过的资料都是推荐这里用union来代替or。事实证明,这种说法对于大部分都是适用的。

本篇文章的题目是:“查询优化及分页算法方案”。笔者只所以把“查询优化”和“分页算法”这两个联系不是很大的论题放在一起,就是因为二者都需要一个非常重要的东西――聚集索引。

Name=’张三’ and 价格>5000

为解决这个矛盾,笔者后来又添加了一个日期列,其默认值为getdate()。用户在写入记录时,这个列自动写入当时的时间,时间精确到毫秒。即使这样,为了避免可能性很小的重合,还要在此列上创建UNIQUE约束。将此日期列作为聚集索引列。

1.(2)select title,price from titles where exists (select * from sales where sales.title_id=titles.title_id and qty>30)

显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。

WHERE 价格>2500/2

2.where fariqi> dateadd(day,-90,getdate())

1.select count(gid) from Tgongwen

10、count(*)不比count(字段)慢

一些人不知道以上两条语句的执行效率是否一样,因为如果简单的从语句先后上看,这两个语句的确是不一样,如果tID是一个聚合索引,那么后一句仅仅从表的10000条以后的记录中查找就行了;而前一句则要先从全表中查找看有几个name=''zhangsan''的,而后再根据限制条件条件tID>10000来提出查询结果。

3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个:

用时:68秒。扫描计数 1,逻辑读 404008 次,物理读 283 次,预读 392163 次。

虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gid

同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。

1.Select top 10 * from table1 where id>200

于是就有了如下分页方案:

1.select top 页大小 *

2.from table1

3.where id>

4.(select max (id) from

5.(select top ((页码-1)*页大小) id from table1 order by id) as T

6.)

7.order by id

where neibuyonghu=''办公室''

1.(2)select title,price from titles where exists (select * from sales where sales.title_id=titles.title_id and qty>30)

Select * from table1 where tid in (2,3)和Select * from table1 where tid=2 or tid=3

我当时看到这篇文章的时候,真的是精神为之一振,觉得思路非常得好。等到后来,我在作办公自动化系统(ASP.NET+ C#+SQL SERVER)的时候,忽然想起了这篇文章,我想如果把这个语句改造一下,这就可能是一个非常好的分页存储过程。于是我就满网上找这篇文章,没想到,文章还没找到,却找到了一篇根据此语句写的一个分页存储过程,这个存储过程也是目前较为流行的一种分页存储过程,我很后悔没有争先把这段文字改造成存储过程:

1.select count(fariqi) from Tgongwen

1、主键就是聚集索引

而:name like ‘%张’ ,就不属于SARG。

这条语句,从理论上讲,整条语句的执行时间应该比子句的执行时间长,但事实相反。因为,子句执行后返回的是10000条记录,而整条语句仅返回10条语句,所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。但这个词在另外一个大型数据库ORACLE中却没有,这不能说不是一个遗憾,虽然在ORACLE中可以用其他方法(如:rownumber)来解决。在以后的关于“实现千万级数据的分页显示存储过程”的讨论中,我们就将用到TOP这个关键词。

Name=’张三’ and 价格>5000 符号SARG,而:Name=’张三’ or 价格>5000 则不符合SARG。使用or会引起全表扫描。

1.select top 10000 gid,fariqi,reader,title from tgongwen

6、exists 和 in 的执行效率是一样的

1.select count(fariqi) from Tgongwen

4、IN 的作用相当与OR

表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。

用时:1376毫秒

但经过试验,笔者发现如果or两边的查询列是一样的话,那么用union则反倒和用or的执行速度差很多,虽然这里union扫描的是索引,而or扫描的是全表。 

从以上可以看出,如果用count(*)和用count(主键)的速度是相当的,而count(*)却比其他任何除主键以外的字段汇总速度要快,而且字段越长,汇总的速度就越慢。我想,如果用count(*), SQL SERVER可能会自动查找最小字段来汇总的。当然,如果您直接写count(主键)将会来的更直接些。

介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:

select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-2-5''

2、以最快的速度进行字段排序。

1、Like语句是否属于SARG取决于所使用的通配符的类型

4、日期列不会因为有分秒的输入而减慢查询速度

用时:52050毫秒

在确定了第三种分页方案后,我们可以据此写一个存储过程。大家知道SQL SERVER的存储过程是事先编译好的SQL语句,它的执行效率要比通过WEB页面传来的SQL语句的执行效率要高。下面的存储过程不仅含有分页方案,还会根据页面传来的参数来确定是否进行数据总数统计。

该句的执行结果为:

3.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid>9990000

用时:11640毫秒。扫描计数 8,逻辑读 14806 次,物理读 108 次,预读 1144 次。

用时:1376毫秒

SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:

1.select count(*) from Tgongwen

从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。

四、其他书上没有的索引使用经验总结

1.(1)select title,price from titles where title_id in (select title_id from sales where qty>30)

用时:6453毫秒

不满足SARG形式的语句最典型的情况就是包括非操作符的语句,如:NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE等,另外还有函数。下面就是几个不满足SARG形式的例子:

2、只要建立索引就能显著提高查询速度

用时:9秒。扫描计数 8,逻辑读 67489 次,物理读 216 次,预读 7499 次。

很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu排在后列):

虽然查询优化器可以根据where子句自动的进行查询优化,但大家仍然有必要了解一下“查询优化器”的工作原理,如非这样,有时查询优化器就会不按照您的本意进行快速查询。

1、您最频繁使用的、用以缩小查询范围的字段上;

列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:

下面是实例语句:(都是提取25万条数据)

7、用函数charindex()和前面加通配符%的LIKE执行效率一样

下面的例子中,共有100万条数据,2004年1月1日以后的数据有50万条,但只有两个不同的日期,日期精确到日;之前有数据50万条,有5000个不同的日期,日期精确到秒。

SQL SERVER也会认为是SARG,SQL SERVER会将此式转化为:

事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。

1.select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-1-1''

这条语句,从理论上讲,整条语句的执行时间应该比子句的执行时间长,但事实相反。因为,子句执行后返回的是10000条记录,而整条语句仅返回10条语句,所以影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。但这个词在另外一个大型数据库ORACLE中却没有,这不能说不是一个遗憾,虽然在ORACLE中可以用其他方法(如:rownumber)来解决。在以后的关于“实现千万级数据的分页显示存储过程”的讨论中,我们就将用到TOP这个关键词。

3.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-2-5''

1.select * from table1 where name=''zhangsan'' and tID > 10000和执行select * from table1 where tID > 10000 and name=''zhangsan''

这里,用聚合索引比用一般的主键作order by时,速度快了3/10。事实上,如果数据量很小的话,用聚集索引作为排序列要比使用非聚集索引速度快得明显的多;而数据量如果很大的话,如10万以上,则二者的速度差别不明显。

用时:1500毫秒

用时:3140毫秒

由此看来,我们每少提取一个字段,数据的提取速度就会有相应的提升。提升的速度还要看您舍弃的字段的大小来判断。

有了这个时间型聚集索引列之后,用户就既可以用这个列查找用户在插入数据时的某个时间段的查询,又可以作为唯一列来实现max或min,成为分页算法的参照物。

2、or 会引起全表扫描

2.union

union

)实现小数据量和海量数据的通用分页显示存储过程

1.select count(title) from Tgongwen

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16'' or fariqi=''2004-2-5''

1.select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc

最早较好地实现这种根据页面大小和页码来提取数据的方法大概就是“俄罗斯存储过程”。这个存储过程用了游标,由于游标的局限性,所以这个方法并没有得到大家的普遍认可。

1.select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc

自动化实例写的存储过程

表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

下面的表总结了何时使用聚集索引或非聚集索引(很重要):

原因是通配符%在字符串的开通使得索引无法使用。

1.(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公室''

表 ''titles''。扫描计数 1,逻辑读 2 次,物理读 0 次,预读 0 次。

1.select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc

列名 操作符 <常数 或 变量>或<常数 或 变量> 操作符列名

用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。

order by gid desc) as a

页码

方案1

方案2

方案3

1

60

30

76

10

46

16

63

100

1076

720

130

500

540

12943

83

1000

17110

470

250

10000

24796

4500

140

100000

38326

42283

1553

250000

28140

128720

2330

500000

121686

127846

7168

select top 10000 gid,fariqi,title from tgongwen

2、您最频繁使用的、需要排序的字段上。

用时:3140毫秒

图片 5图片 6

我们从此可以看到用exists和用in的执行效率是一样的。

图片 7图片 8

介绍完SARG后,我们来总结一下使用SARG以及在实践中遇到的和某些资料上结论不同的经验:

用时:4673毫秒

1.select count(*) from Tgongwen

五、其他注意事项

1.select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc

SARG的定义:用于限制搜索的一个操作,因为它通常是指一个特定的匹配,一个值得范围内的匹配或者两个以上条件的AND连接。形式如下:

用时:4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。

用时:1483毫秒

到此为止,我们上面讨论了如何实现从大容量的数据库中快速地查询出您所需要的数据方法。当然,我们介绍的这些方法都是“软”方法,在实践中,我们还要考虑各种“硬”因素,如:网络性能、服务器的性能、操作系统的性能,甚至网卡、交换机等。

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid<=250000

9、字段提取要按照“需多少、提多少”的原则,避免“select *”

语句:

1.select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc

第1条多用在查询优化时,而第2条多用在进行分页时的数据排序。

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16'' or gid>9990000

我们来做一个试验:

在查询分析阶段,查询优化器查看查询的每个阶段并决定限制需要扫描的数据量是否有用。如果一个阶段可以被用作一个扫描参数(SARG),那么就称之为可优化的,并且可以利用索引快速获得所需数据。

1.select count(gid) from Tgongwen

表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。

1.select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''

事实上,在查询和提取超大容量的数据集时,影响数据库响应时间的最大因素不是数据查找,而是物理的I/0操作。如:

用时:7秒,另外:扫描计数 4,逻辑读 7155 次,物理读 0 次,预读 0 次。

union

Name=’张三’ and 价格>5000

1.select gid,title,fariqi,reader from tgongwen where charindex(''刑侦支队'',reader)>0 and fariqi>''2004-5-5''

该句的执行结果为:

用时:4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。

8、union并不绝对比or的执行效率高

12、高效的TOP

2.select top 10000 gid,fariqi,title from tgongwen

用时:1483毫秒

列名可以出现在操作符的一边,而常数或变量出现在操作符的另一边。如:

8、union并不绝对比or的执行效率高

1.select count(title) from Tgongwen

表 ''sales''。扫描计数 18,逻辑读 56 次,物理读 0 次,预读 0 次。

Name like ‘%三’

1.select top 10 * from (

版权声明:本文由金沙澳门官网网址发布于金沙澳门官网,转载请注明出处:字典的正文部分本身就是一个目录,虽然查询优