??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩人妻无码精品久久免费一,国产aⅴ激情无码久久,久久亚洲精品中文字幕http://www.shnenglu.com/AutomateProgram/category/16809.html当音乐和传说在深夜中沉寂后,E序的每个字W还在蟩动!zh-cnWed, 25 May 2011 09:09:39 GMTWed, 25 May 2011 09:09:39 GMT60Sql优化--SQL Server 索引l构及其使用http://www.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html漂漂漂漂Wed, 25 May 2011 03:17:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.htmlhttp://www.shnenglu.com/AutomateProgram/comments/147076.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/147076.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/147076.htmlhttp://www.vckbase.com/document/viewdoc/?id=1307

一、深入浅出理解烦引结?/strong>

  实际上,您可以把索引理解ZU特D的目录。微软的SQL SERVER提供了两U烦引:聚集索引Qclustered indexQ也U聚cȝ引、簇集烦引)和非聚集索引Qnonclustered indexQ也U非聚类索引、非集索引Q。下面,我们举例来说明一下聚集烦引和非聚集烦引的区别Q?br />  其实Q我们的汉语字典的正文本w就是一个聚集烦引。比如,我们要查“?#8221;字,׃很自然地d字典的前几页Q因?#8220;?#8221;的拼x“an”Q而按照拼x序汉字的字典是以英文字母“a”开头ƈ?#8220;z”l尾的,那么“?#8221;字就自然地排在字典的前部。如果您d了所有以“a”开头的部分仍然找不到这个字Q那么就说明您的字典中没有这个字Q同LQ如果查“?#8221;字,那您也会您的字典翻到最后部分,因ؓ“?#8221;的拼x“zhang”。也是_字典的正文部分本w就是一个目录,您不需要再L其他目录来找到您需要找的内宏V我们把q种正文内容本n是一U按照一定规则排列的目录UCؓ“聚集索引”?br />  如果您认识某个字Q您可以快速地从自动中查到q个字。但您也可能会遇到您不认识的字,不知道它的发韻Iq时候,您就不能按照刚才的方法找到您要查的字Q而需要去Ҏ“偏旁部首”查到您要扄字,然后Ҏq个字后的页码直接翻到某|扑ֈ您要扄字。但您结?#8220;部首目录”?#8220;字表”而查到的字的排序q不是真正的正文的排序方法,比如您查“?#8221;字,我们可以看到在查部首之后的检字表?#8220;?#8221;的页码是672,字表?#8220;?#8221;的上面是“?#8221;字,但页码却?3,“?#8221;的下面是“?#8221;字,面?90c很昄Q这些字q不是真正的分别位于“?#8221;字的上下方,现在您看到的q箋?#8220;驰、张、徃”三字实际上就是他们在非聚集烦引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过q种方式来找到您所需要的字,但它需要两个过E,先找到目录中的结果,然后再翻到您所需要的늠。我们把q种目录Ua是目录,正文Ua是正文的排序方式UCؓ“非聚集烦?#8221;?br />  通过以上例子Q我们可以理解到什么是“聚集索引”?#8220;非聚集烦?#8221;。进一步引申一下,我们可以很容易的理解Q每个表只能有一个聚集烦引,因ؓ目录只能按照一U方法进行排序?br />
二、何时用聚集烦引或非聚集烦?/strong>

下面的表ȝ了何时用聚集烦引或非聚集烦引(很重要)Q?/p>
动作描述 使用聚集索引 使用非聚集烦?/td>
列经常被分组排序 ?/td> ?/td>
q回某范围内的数?/td> ?/td> 不应
一个或极少不同?/td> 不应 不应
数目的不同?/td> ?/td> 不应
大数目的不同?/td> 不应 ?/td>
频繁更新的列 不应 ?/td>
外键?/td> ?/td> ?/td>
主键?/td> ?/td> ?/td>
频繁修改索引?/td> 不应 ?/td>

  事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如Q返回某范围内的数据一V比如您的某个表有一个时间列Q恰好您把聚合烦引徏立在了该列,q时您查?004q??日至2004q?0?日之间的全部数据Ӟq个速度将是很快的Q因为您的这本字典正文是按日期进行排序的Q聚cȝ引只需要找到要索的所有数据中的开头和l尾数据卛_Q而不像非聚集索引Q必d查到目录中查到每一Ҏ据对应的늠Q然后再Ҏ늠查到具体内容?br />
三、结合实际,谈烦引用的误区

  理论的目的是应用。虽然我们刚才列Z何时应用聚集烦引或非聚集烦引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将Ҏ在实践中遇到的实际问题来谈一下烦引用的误区Q以便于大家掌握索引建立的方法?br />
1、主键就是聚集烦?br />  q种xW者认为是极端错误的,是对聚集索引的一U浪贏V虽然SQL SERVER默认是在主键上徏立聚集烦引的?br />  通常Q我们会在每个表中都建立一个ID列,以区分每条数据,q且q个ID列是自动增大的,步长一般ؓ1。我们的q个办公自动化的实例中的列Gid是如此。此Ӟ如果我们这个列设ؓ主键QSQL SERVER会将此列默认集烦引。这样做有好处,是可以让您的数据在数据库中按照IDq行物理排序Q但W者认样做意义不大?br />  显而易见,聚集索引的优势是很明昄Q而每个表中只能有一个聚集烦引的规则Q这使得聚集索引变得更加珍贵?br />  从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,q速羃查询范_避免全表扫描。在实际应用中,因ؓIDh自动生成的,我们q不知道每条记录的IDP所以我们很隑֜实践中用IDhq行查询。这׃让ID可个主键作集烦引成ZU资源浪贏V其ơ,让每个ID号都不同的字D作集烦引也不符?#8220;大数目的不同值情况下不应建立聚合索引”规则Q当Ӟq种情况只是针对用户l常修改记录内容Q特别是索引的时候会负作用,但对于查询速度q没有媄响?br />  在办公自动化pȝ中,无论是系l首|C的需要用L收的文g、会议还是用戯行文件查询等M情况下进行数据查询都M开字段的是“日期”q有用户本n?#8220;用户?#8221;?br />  通常Q办公自动化的首会昄每个用户未{收的文件或会议。虽然我们的where语句可以仅仅限制当前用户未{收的情况,但如果您的系l已建立了很长时_q且数据量很大,那么Q每ơ每个用h开首页的时候都q行一ơ全表扫描,q样做意义是不大的,l大多数的用?个月前的文g都已l浏览过了,q样做只能徒增数据库的开销而已。事实上Q我们完全可以让用户打开pȝ首页Ӟ数据库仅仅查询这个用戯3个月来未阅览的文Ӟ通过“日期”q个字段来限制表扫描Q提高查询速度。如果您的办公自动化pȝ已经建立?q_那么您的首页昄速度理论上将是原来速度8倍,甚至更快?br />  在这里之所以提?#8220;理论?#8221;三字Q是因ؓ如果您的聚集索引q是盲目地徏在IDq个主键上时Q您的查询速度是没有这么高的,即您在“日期”q个字段上徏立的索引Q非聚合索引Q。下面我们就来看一下在1000万条数据量的情况下各U查询的速度表现Q?个月内的数据?5万条Q:

Q?Q仅在主键上建立聚集索引Qƈ且不划分旉D:

Select gid,fariqi,neibuyonghu,title from tgongwen

用时Q?28470毫秒Q即Q?28U)

Q?Q在主键上徏立聚集烦引,在fariq上徏立非聚集索引Q?/p>

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())

用时Q?3763毫秒Q?4U)

Q?Q将聚合索引建立在日期列QfariqiQ上Q?/p>

select gid,fariqi,neibuyonghu,title from Tgongwen
where fariqi> dateadd(day,-90,getdate())

用时Q?423毫秒Q?U)

  虽然每条语句提取出来的都?5万条数据Q各U情늚差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上Q如果您的数据库真的?000万容量的话,把主键徏立在ID列上Q就像以上的W??U情况,在网上的表现就是超ӞҎ无法显C。这也是我摒弃ID列作集烦引的一个最重要的因素。得Z上速度的方法是Q在各个select语句前加Q?/p>

declare @d datetime
set @d=getdate()

q在select语句后加Q?/p>

select [语句执行p旉(毫秒)]=datediff(ms,@d,getdate())

2、只要徏立烦引就能显著提高查询速度
  事实上,我们可以发现上面的例子中Q第2?条语句完全相同,且徏立烦引的字段也相同;不同的仅是前者在fariqi字段上徏立的是非聚合索引Q后者在此字D上建立的是聚合索引Q但查询速度却有着天壤之别。所以,q是在M字段上简单地建立索引p提高查询速度?br />  从徏表的语句中,我们可以看到q个有着1000万数据的表中fariqi字段?003个不同记录。在此字D上建立聚合索引是再合适不q了。在现实中,我们每天都会发几个文Ӟq几个文件的发文日期q同,q完全符合徏立聚集烦引要求的Q?#8220;既不能绝大多数都相同Q又不能只有极少数相?#8221;的规则。由此看来,我们建立“适当”的聚合烦引对于我们提高查询速度是非帔R要的?br />
3、把所有需要提高查询速度的字D都加进聚集索引Q以提高查询速度
  上面已经谈到Q在q行数据查询旉M开字段的是“日期”q有用户本n?#8220;用户?#8221;。既然这两个字段都是如此的重要,我们可以把他们合qv来,建立一个复合烦引(compound indexQ?br />  很多为只要把M字段加进聚集索引Q就能提高查询速度Q也有h感到qhQ如果把复合的聚集烦引字D分开查询Q那么查询速度会减慢吗Q带着q个问题Q我们来看一下以下的查询速度Q结果集都是25万条数据Q:Q日期列fariqi首先排在复合聚集索引的v始列Q用户名neibuyonghu排在后列Q:

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5'' 

查询速度Q?513毫秒

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen 
            where fariqi>''2004-5-5'' and neibuyonghu=''办公?'

查询速度Q?516毫秒

Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公?'

查询速度Q?0280毫秒

  从以上试验中Q我们可以看到如果仅用聚集烦引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一LQ甚x用上全部的复合烦引列q要略快Q在查询l果集数目一L情况下)Q而如果仅用复合聚集烦引的非v始列作ؓ查询条g的话Q这个烦引是不vM作用的。当Ӟ语句1?的查询速度一h因ؓ查询的条目数一P如果复合索引的所有列都用上,而且查询l果的话,q样׃形成“索引覆盖”Q因而性能可以辑ֈ最优。同Ӟ误住:无论您是否经怋用聚合烦引的其他列,但其前导列一定要是用最频繁的列?br />
四、其他书上没有的索引使用l验ȝ

1、用聚合索引比用不是聚合索引的主键速度?br />  下面是实例语句:Q都是提?5万条数据Q?/p>

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

使用旉Q?326毫秒

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

使用旉Q?470毫秒

q里Q用聚合索引比用不是聚合索引的主键速度快了q?/4?br />
2、用聚合索引比用一般的主键作order by旉度快,特别是在数据量情况?/p>

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

用时Q?2936

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

用时Q?8843

  q里Q用聚合索引比用一般的主键作order byӞ速度快了3/10。事实上Q如果数据量很小的话Q用聚集索引作ؓ排序列要比用非聚集索引速度快得明显的多Q而数据量如果很大的话Q如10万以上,则二者的速度差别不明显?br />
3、用聚合烦引内的时间段Q搜索时间会按数据占整个数据表的癑ֈ比成比例减少Q而无合烦引用了多少个:

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

用时Q?343毫秒Q提?00万条Q?/p>

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

用时Q?170毫秒Q提?0万条Q?/p>

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

用时Q?326毫秒Q和上句的结果一模一栗如果采集的数量一P那么用大于号和等于号是一LQ?/p>

select gid,fariqi,neibuyonghu,reader,title from Tgongwen 
            where fariqi>''2004-1-1'' and fariqi<''2004-6-6''

用时Q?280毫秒

4、日期列不会因ؓ有分U的输入而减慢查询速度
  下面的例子中Q共?00万条数据Q?004q??日以后的数据?0万条Q但只有两个不同的日期,日期_到日Q之前有数据50万条Q有5000个不同的日期Q日期精到U?/p>

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

用时Q?390毫秒

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

用时Q?453毫秒

五、其他注意事?/strong>

  “水可载舟Q亦可覆?#8221;Q烦引也一栗烦引有助于提高索性能Q但q多或不当的索引也会Dpȝ低效。因为用户在表中每加q一个烦引,数据库就要做更多的工作。过多的索引甚至会导致烦引碎片?br />  所以说Q我们要建立一?#8220;适当”的烦引体p,特别是对聚合索引的创建,更应_求精Q以使您的数据库能得到高性能的发挥?br />  当然Q在实践中,作ؓ一个尽职的数据库管理员Q您q要多测试一些方案,扑և哪种Ҏ效率最高、最为有效?/p>

漂漂 2011-05-25 11:17 发表评论
]]>
ubuntu避免mysql中文qhttp://www.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.html漂漂漂漂Tue, 03 May 2011 05:36:00 GMThttp://www.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.htmlhttp://www.shnenglu.com/AutomateProgram/comments/145558.htmlhttp://www.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.html#Feedback0http://www.shnenglu.com/AutomateProgram/comments/commentRss/145558.htmlhttp://www.shnenglu.com/AutomateProgram/services/trackbacks/145558.html在Ubuntu 下配|?Mysql 的字W编码。安装完 Mysql 后,pȝ默认的字W编码是 latin1 Q输入的是中文,可是输出却是一堆ؕ码。现在要做的是?Mysql的默认字W编码设|ؓ支持中文的编码,?GBK、GB23112、等?br clear=none>    ~辑mysql的配|文?etc/mysql/my.conf ?/span>

在[mysql] 的下面加?default-character-set=utf8 q一D代码?/span>

 在[client] 的下面加?default-character-set=utf8 q一D代码?/span>

?[mysqld] 下面加上 default-character-set=utf8   init_connect='SET NAMES utf8' q俩D代码?/span>

保存文gQ重启动mysql:/etc/init.d/mysql restart


在创时用如下命oQ?br> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), birth DATE, birthaddr VARCHAR(20)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

漂漂 2011-05-03 13:36 发表评论
]]>
պŷþþwwwۺ| ŷƷһþĻ| ޳ɫWWWþվ| þۺ㽶AV| ľþþƷww16| þþƷŷպƷ| þñþۺ| ޹˾þһҳ| þþ޾Ʒ| þþƷƷƾ| þ99ù龫Ʒ66| 97þþþ| ձþþվ| þۺϾɫۺϾƷ| þ99Ʒþþôѧ| Ʒ׾þAAAƬ69| ˾þô߽| ޷?Vþò| ھƷþþþþ99| þþþþavѿƬ| ƷŮٸaѾþ| þ޹ӰԺ| ƷˮҾþþþþþ| ƷþþþþĻһ| ŷƷרþ| Ʒ99þþƷ| ɫþAVۺ| ľƷþþþ޲| þþƷƷ| һaƬþëƬ| 99þۺϺݺۺϾþֹ| AëƬþþþƷëƬ| һaƬþëƬëƬ | þ㽶Ƶ| ɫۺɫþû| AVĻþר| þ99ù龫Ʒ66| һƷ˾þ| ٸþĻ| ŷƷþø| Ѿþˬˬav|