主键和索引哪个查询效率更快??

1.有次面试被问到,主键和索引哪个查询更快?
有没有哪个高手,能给详细解释下。。。在网上查了下,很多都只是给解释一统,簇聚索引和非簇聚索引,但没有特别明确给出答案。
2.还有个问题是,如果在sql语句使用了函数,还能否给字段建立索引。。
求大侠赐教!

4个回答

1.1. 主键和索引都有很多种实现方式,对于同一种实现方式来说,速度是一样的
1.2. 主键通常使用聚簇索引。可以认为聚簇索引是一种Hash索引,因此是比较快的
2.用了函数能否建索引?当然是可以的。使用函数作为条件的查询能否用到索引?应该是用不到

(1)主键都是加上索引的。主键的索引是唯一索引,不同的数据库可能不同,有些会有非簇聚索引
(2)当然可以,定义了索引不一定在查询中使用索引,最坏的情况是相当于索引不存在

主键查询效率比索引更快。因为索引有很多种,不能保证都是唯一的。主键必须是唯一的

创建主键的时候会创建唯一索引,查询的时候是索引起到了优化的作用
使用了函数会导致已经创建的索引失效

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
对于有索引的字段 哪个更快
[code=SQLrncreate table tbrn(rn id int identity(1,),rn addtime datetime default(getdate())rnrn)rn[/code]rnaddtime 上建有索引rnrn查出当天记录的两个SQL rn第一个rnrn[code=SQL]rnselect * from tb where diffdate(day,addtime,getdate()) = 0rn[/code]rn第二个rn[code=SQL]rnselect * from tb where addtime >='2009-02-10' and addtime <'2009-02-11'rn[/code]rnrn据说只要用函数处理了列就不会使用索引 也是就说第二个比第一个快了 ? 可是我感觉 速度都慢 ,比不加WHERE 条件都慢
哪个更快
是把 写在<%%>里快还是rn把<%%>写在 里快。
提升数据的查询效率----索引
我们通过SQL语句查询表中的数据看似很快,但如果表中的数据达到百万级甚至是千万级的话,那一切都变了,针对不同的条件筛选数据时会变得很慢。如电信运营商对庞大的数据库做的优化:最简单的说,电信运营商有三个“R技能”: 1) 分布式集群:在全国各地部署大量的电信数据库,每个数据库默认只记录当前地区的实时通话记录,每隔一段时间,这些数据库的数据会同步一次。 2) 拆分表:将通话记录按照不同年份和月份的
索引对查询效率的影响
索引对查询效率的影响 0.参考文献 http://msdn.microsoft.com/zh-cn/library/ms172984(SQL.90).aspx 1.实验数据 我们将利用AdvantureWords2008R2中的Sales.SalesOrderDetail表,其中有12万条数据,非常适合用于测试。不过我们不直接在这张表上做测试...
索引影响查询效率的问题
select * from 组织 join 部门 on 组织.编号 = 部门.组织编号rnrn组织表中的编号是主键 和部门表的组织编号没有约束关系 该查询语句没有问题rnrn然后部门表的组织编号加了索引 查询速度大大降低rnrn但是如果改变sql语句为:select * from 部门 inner join 组织 on 部门.组织编号 = 组织.编号 速度就快了 不知道是什么原因
提高数据库查询效率之索引
一般在常用的column_name上面添加索引,如order by字句中的column_name Create index index_name on table_name(column_name); 可以提高查询效率
mysql主键索引与非主键索引区别
不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中 索引会真正的产生一个文件的 数据会真正的产生一个文件的 redo log 记录的是物理日志&quot;某个数据页上做了什么修改&quot;  循环使用 bin log 记录的是逻辑日志 语句的原始逻辑&quot;ID=1 ,2 &quot; 追加使用 而主键不会产生一个文件的 主键的搜索靠索引的树的搜索 数据的概念 数据有数据页的概念 mysql也有...
索引,主键
假如我查询中要用到2个字段排序(order by time desc,id)这两字段排序较频繁rn是不是要在time,id上建聚集索引。还有分页时用到id (也还较频繁),id 也需要建索引 rn现在问题是不知道聚集索引如何分配,各位给个方案。
主键,索引
想问一下主键和索引的意义?以及它们之间有什么关系没?
Oracle 添加主键、索引、删除主键、索引
--删除表主键 ALTER TABLE jw_jxrw_wxlsrwkcb DROP CONSTRAINT PK_JW_JXRW_WXLSRWKCB; --删除索引 drop index PK_JW_JXRW_WXLSRWKCB;--添加主键 -- Create/Recreate primary alter table jw_jxrw_wxlsrwkcb add constraint PK_JW_
比较方法,哪个更快?
第一种方法rnfor i=1 to 10rn Set rs = Server.CreateObject("Adodb.RecordSet")rn sqlv = " SELECT * FROM TSARTNChkDtl "rn rs.open sqlv, conn, 1, 3rn rs.AddNewrn rs("cditchid") = cditchidrn rs("csaretchkid") = pay_id_allrn rs("csaretchkdtlid") = no1rn rs.updatern rs.closernnextrn第二种方法rnfor i=1 to 10rnsql = "insert TSARTNChkDtl (cditchid,csaretchkid,csaretchkdtlid) values ('"&CDITCHID&"','"&pay_id_all&"','"&no1&"')"rn end ifrn conn.execute sqlrnnext rnrn哪种方法速度更快些?效率好些?rn
访问数据库 哪个更快
我们的BOSS系统 底层 C++ 完全封装了 sql 也就是说 前台每个请求都要调一次 C++ 这样会不会影响效率 有什么好处?rnrn 如果 在 前台 Hibernate 来访问数据库 效率又是什么杨 有什么弊端 ?rnrn请 个为 大侠 明鉴 ......
比较字符串,哪个更快?
这样两种比较字符串的方法,哪种更快,各有何有缺点?还有没有其他好方法?rnstr1,str2: stringrn① if str1=str2 then ...rn② if CompareText(str1,str2)=0 then ...
临时表和聚簇索引哪个更快?
需要用数据库里的数据画图,每次画时需要的数据比较多。rn有两个办法:rn1. 每次画图以前把相关数据选到临时表,再遍历每条数据,若数据有更新,每次都更新原表。rn2. 程序启动时,把所有的数据放到临时表,画图时直接取,运行时只更新临时表,退出时让原表同步临时表(若异常退出不同步问题不大)。
排序算法:哪个更快?
我现在有一个4个元素的数组,想排序,假设排序算法为sort,在我的程序里,要调用sort无穷多次。我用过冒泡、快速排序,哪位仁兄能分析分析,采用哪种算法更节省时间。rn 若提供一个有价值的分析,我会加倍给分....
哪个计算起来更快?
float r,i,k;rn1、rni=0.5,k=0.6;rnr=i*k;rnrn2、rni=0.125678,k=0.278135;rnr=i*k;rnrn1、2两种情况中,i、k的有效位数不同,是否计算耗时也会不同?rnrn猜测一样快,因为都是float,但不太确定,望大侠们指点一下!rnrn
主键与索引
一个表中如果设置了主键,请问这个主键是否有索引的功能?即,如果我想查询快一点,是否要在这个主键上加上索引?
主键和索引
本人数据基础不太好,那位大哥能不能介绍一下两者。感激不尽!
dbgrid和stringgrid哪个更快
大家好:rn 从sqlserver2000中读上万条纪录然后用dbgird或stringgrid显示哪个更快?
哪个sql更快?
表singer:rnsingerID,singerNamern1,刘德华rn2,张学友rn3,郭富城rn4,黎明rnrn表song:rnsongID,songName,singerIDrn1,忘情水,1rn2,中国人,1rn3,吻别,2rn4,对你爱不完,3rn5,今夜你会不会来,4rnrn我想查找刘德华的歌曲,有两种sql语句:rn1.两表连接rn[code=C#]rnselect song.songNamernfrom song,singerrnwhere song.singerID = singer.singerIDrnand singer.singerName = '刘德华'[/code]rn2.嵌套rn[code=SQL]rnselect songNamernfrom songrnwhere singerID = (select singerID from singer where singerName = '刘德华')[/code]rnrn在数据量很大的情况是,是连接表更快还是嵌套更快?rn谢谢!
同步和异步传输哪个更快?
在相同的环境中。同步和异步传输哪个更快?什么是同步传输?什么又是异步传输?
C#和VB.NET哪个更快?
准备写有关程序,界面用VB.NET,DLL用C#,但是,C#和VB.NET哪个更快?rn性能上有什么差别?
哪个查询会更快?
select * from tbl where id=3;rnselect name from tbl where id=3;rn这两个查询哪个会更快?
请问哪个运行更快?
If not exists(Select 1 from UserProduct where UserID=@guid and ModelID=@product)rn和rnIf not exists(Select * from UserProduct where UserID=@guid and ModelID=@product)rn哪句更快些?还有比这更快的语句吗?
iteration,for,foreach哪个更快
iteration,for,foreach哪个更快?
Repeater与Datalist哪个更快?
有没有人测试过? 在数据量跟访问两不大的情况下。 或者都大的情况下。
join和游标哪个更快?
我知道数据库会维护表数据的直方图,用于快速查找数据rn但我最近看了本书,说的是表表达式和游标的差别,表表达式的数据效率是随着数据量更大而呈现一个向上的抛物线,而游标是呈一直线增长rn我想问对于普通表来说,是否会像表表达式那样效率呈现成抛物线增长?为什么?join具体的内部实现是怎么样的?
哪个for循环更快?为什么?
for(i = 0; i < 100000; i++)rnrnfor(i = 100000; i > 0; i--)rnrn哪个for循环更快?为什么?
究竟哪个更快一些?
网速与操作系统有关吗?rnwin2000,winXP,win2003 sever哪个上网更快一些?rn
聚焦索引与非聚焦索引及其查询效率
随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量。那么,如何实现快速地从这些超大容量的数据库中提取数据(查询)、分析、统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题。rnrn在以下的文章中,我将以“办公自动化”系统为例,探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构:rnrnCREATE TABLE [dbo].[TGongwen] ( --TGongwen是红头文件表名rnrn[Gid] [int] IDENTITY (1, 1) NOT NULL ,rn--本表的id号,也是主键rnrn[title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL , rn--红头文件的标题rnrn[fariqi] [datetime] NULL ,rn--发布日期rnrn[neibuYonghu] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL ,rn--发布用户rnrn[reader] [varchar] (900) COLLATE Chinese_PRC_CI_AS NULL ,rnrn--需要浏览的用户。每个用户中间用分隔符“,”分开rnrn) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]rnrnGOrnrnrnrn下面,我们来往数据库中添加1000万条数据:rnrndeclare @i intrnrnset @i=1rnrnwhile @i<=250000rnrnbeginrnrninsert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-2-5','通信科','通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科','这是最先的25万条记录')rnrnset @i=@i+1rnrnendrnrnGOrnrnrnrndeclare @i intrnrnset @i=1rnrnwhile @i<=250000rnrnbeginrnrninsert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-9-16','办公室','办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科','这是中间的25万条记录')rnrnset @i=@i+1rnrnendrnrnGOrnrnrnrndeclare @h intrnrnset @h=1rnrnwhile @h<=100rnrnbeginrnrndeclare @i intrnrnset @i=2002rnrnwhile @i<=2003rnrnbeginrnrndeclare @j intrnrnset @j=0rnrnwhile @j<50rnrnbeginrnrndeclare @k intrnrnset @k=0rnrnwhile @k<50rnrnbeginrnrninsert into Tgongwen(fariqi,neibuyonghu,reader,title) values(cast(@i as varchar(4))+'-8-15 3:'+cast(@j as varchar(2))+':'+cast(@j as varchar(2)),'通信科','办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科','这是最后的50万条记录')rnrnset @k=@k+1rnrnendrnrnset @j=@j+1rnrnendrnrnset @i=@i+1rnrnendrnrnset @h=@h+1rnrnendrnrnGOrnrnrnrndeclare @i intrnrnset @i=1rnrnwhile @i<=9000000rnrnbeginrnrninsert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-5-5','通信科','通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科','这是最后添加的900万条记录')rnrnset @i=@i+1000000rnrnendrnrnGOrnrn通过以上语句,我们创建了25万条由通信科于2004年2月5日发布的记录,25万条由办公室于2004年9月6日发布的记录,2002年和2003年各100个2500条相同日期、不同分秒的由通信科发布的记录(共50万条),还有由通信科于2004年5月5日发布的900万条记录,合计1000万条。rnrnrnrn一、因情制宜,建立“适当”的索引rnrn建立“适当”的索引是实现查询优化的首要前提。rnrn索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。注意,在这句话中,我们用了“适当”这个词,这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。rnrn(一)深入浅出理解索引结构rnrn实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的区别:rnrn其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。rnrn我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。rnrn如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。rnrn我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。rnrn通过以上例子,我们可以理解到什么是“聚集索引”和“非聚集索引”。rnrn进一步引申一下,我们可以很容易的理解:每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。rnrn(二)何时使用聚集索引或非聚集索引rnrn下面的表总结了何时使用聚集索引或非聚集索引(很重要)。rn动作描述 rn使用聚集索引 rn使用非聚集索引 rnrnrn大数目的不同值 rn不应 rn应 rnrn频繁更新的列 rn不应 rn应 rnrn外键列 rn应 rn应 rnrn主键列 rn应 rn应 rnrn频繁修改索引列 rn不应 rn应 rnrnrn事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。rnrn(三)结合实际,谈索引使用的误区rnrn理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。rnrn1、主键就是聚集索引rnrn这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。rnrn通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。rnrn显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。rnrn从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会负作用,但对于查询速度并没有影响。rnrn在办公自动化系统中,无论是系统首页显示的需要用户签收的文件、会议还是用户进行文件查询等任何情况下进行数据查询都离不开字段的是“日期”还有用户本身的“用户名”。rnrn通常,办公自动化的首页会显示每个用户尚未签收的文件或会议。虽然我们的where语句可以仅仅限制当前用户尚未签收的情况,但如果您的系统已建立了很长时间,并且数据量很大,那么,每次每个用户打开首页的时候都进行一次全表扫描,这样做意义是不大的,绝大多数的用户1个月前的文件都已经浏览过了,这样做只能徒增数据库的开销而已。事实上,我们完全可以让用户打开系统首页时,数据库仅仅查询这个用户近3个月来未阅览的文件,通过“日期”这个字段来限制表扫描,提高查询速度。如果您的办公自动化系统已经建立的2年,那么您的首页显示速度理论上将是原来速度8倍,甚至更快。rnrn在这里之所以提到“理论上”三字,是因为如果您的聚集索引还是盲目地建在ID这个主键上时,您的查询速度是没有这么高的,即使您在“日期”这个字段上建立的索引(非聚合索引)。下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条):rnrn(1)仅在主键上建立聚集索引,并且不划分时间段:rnrnSelect gid,fariqi,neibuyonghu,title from tgongwenrnrn用时:128470毫秒(即:128秒)rnrn(2)在主键上建立聚集索引,在fariq上建立非聚集索引:rnrnselect gid,fariqi,neibuyonghu,title from Tgongwenrnrnwhere fariqi> dateadd(day,-90,getdate())rnrn用时:53763毫秒(54秒)rnrn(3)将聚合索引建立在日期列(fariqi)上:rnrnselect gid,fariqi,neibuyonghu,title from Tgongwenrnrnwhere fariqi> dateadd(day,-90,getdate())rnrn用时:2423毫秒(2秒)rnrn虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第1、2种情况,在网页上的表现就是超时,根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。rnrn得出以上速度的方法是:在各个select语句前加:declare @d datetimernrnset @d=getdate()rnrn并在select语句后加:rnrnselect [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())rnrn2、只要建立索引就能显著提高查询速度rnrn事实上,我们可以发现上面的例子中,第2、3条语句完全相同,且建立索引的字段也相同;不同的仅是前者在fariqi字段上建立的是非聚合索引,后者在此字段上建立的是聚合索引,但查询速度却有着天壤之别。所以,并非是在任何字段上简单地建立索引就能提高查询速度。rnrn从建表的语句中,我们可以看到这个有着1000万数据的表中fariqi字段有5003个不同记录。在此字段上建立聚合索引是再合适不过了。在现实中,我们每天都会发几个文件,这几个文件的发文日期就相同,这完全符合建立聚集索引要求的:“既不能绝大多数都相同,又不能只有极少数相同”的规则。由此看来,我们建立“适当”的聚合索引对于我们提高查询速度是非常重要的。rnrn3、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度rnrn上面已经谈到:在进行数据查询时都离不开字段的是“日期”还有用户本身的“用户名”。既然这两个字段都是如此的重要,我们可以把他们合并起来,建立一个复合索引(compound index)。rnrn很多人认为只要把任何字段加进聚集索引,就能提高查询速度,也有人感到迷惑:如果把复合的聚集索引字段分开查询,那么查询速度会减慢吗?带着这个问题,我们来看一下以下的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列,用户名neibuyonghu排在后列)rnrn(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5' rnrn查询速度:2513毫秒rnrn(2)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>'2004-5-5' and neibuyonghu='办公室'rnrn查询速度:2516毫秒rnrn(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu='办公室'rnrn查询速度:60280毫秒rnrn从以上试验中,我们可以看到如果仅用聚集索引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一样的,甚至比用上全部的复合索引列还要略快(在查询结果集数目一样的情况下);而如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。当然,语句1、2的查询速度一样是因为查询的条目数一样,如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。rnrn(四)其他书上没有的索引使用经验总结rnrn1、用聚合索引比用不是聚合索引的主键速度快rnrn下面是实例语句:(都是提取25万条数据)rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'rnrn使用时间:3326毫秒rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid<=250000rnrn使用时间:4470毫秒rnrn这里,用聚合索引比用不是聚合索引的主键速度快了近1/4。rnrn2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen order by fariqirnrn用时:12936rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gidrnrn用时:18843rnrn这里,用聚合索引比用一般的主键作order by时,速度快了3/10。事实上,如果数据量很小的话,用聚集索引作为排序列要比使用非聚集索引速度快得明显的多;而数据量如果很大的话,如10万以上,则二者的速度差别不明显。rnrn3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-1-1'rnrn用时:6343毫秒(提取100万条) rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-6-6'rnrn用时:3170毫秒(提取50万条)rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi='2004-9-16'rnrn用时:3326毫秒(和上句的结果一模一样。如果采集的数量一样,那么用大于号和等于号是一样的)rnrnselect gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>'2004-1-1' and fariqi<'2004-6-rnrnrnrn
关于索引影响查询效率的问题?
一个比较复杂的视图:V_View.里面还有几个表的连接.rn执行查询 rn 1.select * from V_View 耗时0.95srn 2.select count(*) from V_View 耗时420s 返回数7万余条rn想要实现的是:先执行查询2返回总数,再用查询1返回结果列表。rn尝试了一些优化方法,没太大用.rn后来发现V_View中一个大表TB_CEP的非唯一索引IDX_CEP(就是用来作连接的那个字段上的)可以大幅度rn的影响执行效率。rn我做了试验rn 删除IDX_CEP索引rn 执行select * from V_View 耗时16srn 执行select count(*) from V_View 耗时16srn相对来说,效率还可以。但是一旦再次建立了索引就又恢复到以前的效率了。rn请问,怎么才能让查询能够保持无索引IDX_CEP状态的下查询计划呢?(我不可能删除索引IDX_CEP)
mysql中,分表查询和索引查询哪个更快?
https://m.zjurl.cn/question/6552313538721874184/?app=news_article&amp;amp;share_ansid=6662285232693051656&amp;amp;iid=64554186805&amp;amp;app_id=13&amp;amp;tt_from=mobile_qq&amp;amp;utm_source=mobile_qq&amp;amp;utm_medium=to...
使用Oracle函数索引 提高查询效率
使用Oracle函数索引,无疑是提高查询效率的有效方法之一。下面就为您详细介绍Oracle函数索引的使用方法,希望对您能有所帮助。 谈到任何对列的操作都可能导致全表扫描,例如: select * from emp where substr(ename,1,2)=’SM’;  但是这种查询在客服系统又经常使用,我们可以创建一个带有substr函数的基于Oracle函数索引, cre...
【数据库】索引——快速提高查询效率
项目中用到了很多的索引,将一些关键字段的很多都设置为索引。本博客将和大家分享一些索引的基本知识                  为什么要使用索引?       使用索引,可以大大的提高系统的性能,在sql语句或者是存储过程的操作中,可以快速定位在执行的表关系中,避免全表扫描,增加效率。       一般我们创建索引,都会在主键、外键、或者是比较常用在sql语句或者是存储过程中的经
table 和 query 的哪个查询效率高点
table 和 query 的哪个查询效率高点?
两种统计方式哪个更快?
假设有10个一样表a1,a2,a3,a4,a5,a6,a7,a8,a9,a10 .每个表100万条记录,我要对10个表一起进行统计rn 请问下面哪种方式更快。rn 1)rn select a,sum(c) from rn ( select a,sum(b) as c from a1 group by arn union all select a,sum(b) as c from a2 group by arn union all select a,sum(b) as c from a3 group by arn ...rn union all select a,sum(b) as c from a10 group by arn ) group by arn rn 2)rn select a,sum(b) from rn ( select a,b from a1rn union all select a,b from a2rn union all select a,b from a3 rn ...rn union all select a,b from a10 rn ) group by arn rn 此问题是不是还与硬件性能有关rn
ajax 和 iframe 哪个速度更快?
最近想把网站里用iframe的地方修改成 ajax的,大家给些建议
问答1:哪个Sql更快
假设订单有三种状态:0已下单,1已支付,2已完成。业务需求,查询未完成的订单,哪个SQL更快呢? select * from order where status!=2 select * from order where status=0 or status=1 select * from order where status IN (0,1) select *...
in_array和array_keys哪个效率更快
判断一个百万级别的数值数组中是否存在对应的值,如题.求教!
ado 与odbc比,哪个更快?
rn要用VC将大量数据写入数据库(access or sql server)中.对效率要求比较高。rnrn请问:rnado 与odbc比,哪个更快?rnrn谢谢
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件