??xml version="1.0" encoding="utf-8" standalone="yes"?>久久99精品久久久久久水蜜桃,99久久婷婷国产一区二区,91精品婷婷国产综合久久http://m.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构?qing)其使?/title><link>http://m.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html</link><dc:creator>漂漂</dc:creator><author>漂漂</author><pubDate>Wed, 25 May 2011 03:17:00 GMT</pubDate><guid>http://m.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html</guid><wfw:comment>http://m.shnenglu.com/AutomateProgram/comments/147076.html</wfw:comment><comments>http://m.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/AutomateProgram/comments/commentRss/147076.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/AutomateProgram/services/trackbacks/147076.html</trackback:ping><description><![CDATA[原文地址Q?a >http://www.vckbase.com/document/viewdoc/?id=1307</a><br /><br /><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="line-height: 24px; font-family: Tahoma; letter-spacing: 1px; font-size: 14px" class="Apple-style-span"> <p><strong>一、深入浅出理解烦(ch)引结?/strong><br /><br />  实际上,(zhn)可以把索引理解ZU特D的目录。微软的SQL SERVER提供了两U烦(ch)引:(x)聚集索引Qclustered indexQ也U聚cȝ(ch)引、簇集烦(ch)引)(j)和非聚集索引Qnonclustered indexQ也U非聚类索引、非集索引Q。下面,我们举例来说明一下聚集烦(ch)引和非聚集烦(ch)引的区别Q?br />  其实Q我们的汉语字典的正文本w就是一个聚集烦(ch)引。比如,我们要查“?#8221;字,׃(x)很自然地d字典的前几页Q因?#8220;?#8221;的拼x“an”Q而按照拼x序汉字的字典是以英文字母“a”开头ƈ?#8220;z”l尾的,那么“?#8221;字就自然地排在字典的前部。如果?zhn)d了所有以“a”开头的部分仍然找不到这个字Q那么就说明(zhn)的字典中没有这个字Q同L(fng)Q如果查“?#8221;字,那?zhn)也?x)?zhn)的字典翻到最后部分,因ؓ(f)“?#8221;的拼x“zhang”。也是_(d)字典的正文部分本w就是一个目录,(zhn)不需要再L其他目录来找到?zhn)需要找的内宏V我们把q种正文内容本n是一U按照一定规则排列的目录UCؓ(f)“聚集索引”?br />  如果(zhn)认识某个字Q?zhn)可以快速地从自动中查到q个字。但(zhn)也可能?x)遇到(zhn)不认识的字,不知道它的发韻Iq时候,(zhn)就不能按照刚才的方法找到?zhn)要查的字Q而需要去Ҏ(gu)“偏旁部首”查到(zhn)要扄字,然后Ҏ(gu)q个字后的页码直接翻到某|扑ֈ(zhn)要扄字。但(zhn)结?#8220;部首目录”?#8220;(g)字表”而查到的字的排序q不是真正的正文的排序方法,比如(zhn)查“?#8221;字,我们可以看到在查部首之后的检字表?#8220;?#8221;的页码是672,(g)字表?#8220;?#8221;的上面是“?#8221;字,但页码却?3,“?#8221;的下面是“?#8221;字,面?90c(din)很昄Q这些字q不是真正的分别位于“?#8221;字的上下方,现在(zhn)看到的q箋?#8220;驰、张、徃”三字实际上就是他们在非聚集烦(ch)引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过q种方式来找到?zhn)所需要的字,但它需要两个过E,先找到目录中的结果,然后再翻到?zhn)所需要的늠。我们把q种目录Ua(b)是目录,正文Ua(b)是正文的排序方式UCؓ(f)“非聚集烦(ch)?#8221;?br />  通过以上例子Q我们可以理解到什么是“聚集索引”?#8220;非聚集烦(ch)?#8221;。进一步引申一下,我们可以很容易的理解Q每个表只能有一个聚集烦(ch)引,因ؓ(f)目录只能按照一U方法进行排序?br /><br /><strong>二、何时用聚集烦(ch)引或非聚集烦(ch)?/strong><br /><br />下面的表ȝ了何时用聚集烦(ch)引或非聚集烦(ch)引(很重要)(j)Q?/p> <table style="line-height: 18pt; border-collapse: collapse; font-family: Tahoma; letter-spacing: 1px; color: rgb(0,0,0); font-size: 14px" id="AutoNumber1" border="1" cellspacing="0" cellpadding="0" width="62%" height="107"> <tbody> <tr> <td height="23" width="40%" align="center">动作描述</td> <td height="23" width="29%" align="center">使用聚集索引</td> <td height="23" width="31%" align="center">使用非聚集烦(ch)?/td></tr> <tr> <td height="20" width="40%">列经常被分组排序</td> <td height="20" width="29%">?/td> <td height="20" width="31%">?/td></tr> <tr> <td height="20" width="40%">q回某范围内的数?/td> <td height="20" width="29%">?/td> <td height="20" width="31%">不应</td></tr> <tr> <td height="20" width="40%">一个或极少不同?/td> <td height="20" width="29%">不应</td> <td height="20" width="31%">不应</td></tr> <tr> <td height="20" width="40%">数目的不同?/td> <td height="20" width="29%">?/td> <td height="20" width="31%">不应</td></tr> <tr> <td height="20" width="40%">大数目的不同?/td> <td height="20" width="29%">不应</td> <td height="20" width="31%">?/td></tr> <tr> <td height="20" width="40%">频繁更新的列</td> <td height="20" width="29%">不应</td> <td height="20" width="31%">?/td></tr> <tr> <td height="20" width="40%">外键?/td> <td height="20" width="29%">?/td> <td height="20" width="31%">?/td></tr> <tr> <td height="20" width="40%">主键?/td> <td height="20" width="29%">?/td> <td height="20" width="31%">?/td></tr> <tr> <td height="20" width="40%">频繁修改索引?/td> <td height="20" width="29%">不应</td> <td height="20" width="31%">?/td></tr></tbody></table> <p>  事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如Q返回某范围内的数据一V比如?zhn)的某个表有一个时间列Q恰好?zhn)把聚合?ch)引徏立在了该列,q时(zhn)查?004q??日至2004q?0?日之间的全部数据Ӟq个速度将是很快的Q因为?zhn)的这本字典正文是按日期进行排序的Q聚cȝ(ch)引只需要找到要(g)索的所有数据中的开头和l尾数据卛_Q而不像非聚集索引Q必d查到目录中查到每一Ҏ(gu)据对应的늠Q然后再Ҏ(gu)늠查到具体内容?br /><br /><strong>三、结合实际,谈烦(ch)引用的误区</strong><br /><br />  理论的目的是应用。虽然我们刚才列Z何时应用聚集烦(ch)引或非聚集烦(ch)引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将Ҏ(gu)在实践中遇到的实际问题来谈一下烦(ch)引用的误区Q以便于大家掌握索引建立的方法?br /><br />1、主键就是聚集烦(ch)?br />  q种xW者认为是极端错误的,是对聚集索引的一U浪贏V虽然SQL SERVER默认是在主键上徏立聚集烦(ch)引的?br />  通常Q我们会(x)在每个表中都建立一个ID列,以区分每条数据,q且q个ID列是自动增大的,步长一般ؓ(f)1。我们的q个办公自动化的实例中的列Gid是如此。此Ӟ如果我们这个列设ؓ(f)主键QSQL SERVER?x)将此列默认集?ch)引。这样做有好处,是可以让?zhn)的数据在数据库中按照IDq行物理排序Q但W者认样做意义不大?br />  显而易见,聚集索引的优势是很明昄Q而每个表中只能有一个聚集烦(ch)引的规则Q这使得聚集索引变得更加珍贵?br />  从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,q速羃?yu)查询范_(d)避免全表扫描。在实际应用中,因ؓ(f)IDh自动生成的,我们q不知道每条记录的IDP所以我们很隑֜实践中用IDhq行查询。这׃让ID可个主键作集烦(ch)引成ZU资源浪贏V其ơ,让每个ID号都不同的字D作集烦(ch)引也不符?#8220;大数目的不同值情况下不应建立聚合索引”规则Q当?dng)q种情况只是针对用户l常修改记录内容Q特别是索引的时候会(x)负作用,但对于查询速度q没有媄(jing)响?br />  在办公自动化pȝ中,无论是系l首|C的需要用L(fng)收的文g、会(x)议还是用戯行文件查询等M情况下进行数据查询都M开字段的是“日期”q有用户本n?#8220;用户?#8221;?br />  通常Q办公自动化的首会(x)昄每个用户未{收的文件或?x)议。虽然我们的where语句可以仅仅限制当前用户未{收的情况,但如果?zhn)的系l已建立了很长时_(d)q且数据量很大,那么Q每ơ每个用h开首页的时候都q行一ơ全表扫描,q样做意义是不大的,l大多数的用?个月前的文g都已l浏览过了,q样做只能徒增数据库的开销而已。事实上Q我们完全可以让用户打开pȝ首页Ӟ数据库仅仅查询这个用戯3个月来未阅览的文Ӟ通过“日期”q个字段来限制表扫描Q提高查询速度。如果?zhn)的办公自动化pȝ已经建立?q_(d)那么(zhn)的首页昄速度理论上将是原来速度8倍,甚至更快?br />  在这里之所以提?#8220;理论?#8221;三字Q是因ؓ(f)如果(zhn)的聚集索引q是盲目地徏在IDq个主键上时Q?zhn)的查询速度是没有这么高的,即(zhn)在“日期”q个字段上徏立的索引Q非聚合索引Q。下面我们就来看一下在1000万条数据量的情况下各U查询的速度表现Q?个月内的数据?5万条Q:(x)<br /><br />Q?Q仅在主键上建立聚集索引Qƈ且不划分旉D:(x)</p><pre>Select gid,fariqi,neibuyonghu,title from tgongwen</pre> <p>用时Q?28470毫秒Q即Q?28U)(j)<br /><br />Q?Q在主键上徏立聚集烦(ch)引,在fariq上徏立非聚集索引Q?/p><pre>select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> dateadd(day,-90,getdate())</pre> <p>用时Q?3763毫秒Q?4U)(j)<br /><br />Q?Q将聚合索引建立在日期列QfariqiQ上Q?/p><pre>select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> dateadd(day,-90,getdate())</pre> <p>用时Q?423毫秒Q?U)(j)<br /><br />  虽然每条语句提取出来的都?5万条数据Q各U情늚差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上Q如果?zhn)的数据库真的?000万容量的话,把主键徏立在ID列上Q就像以上的W??U情况,在网上的表现就是超ӞҎ(gu)无法显C。这也是我摒弃ID列作集烦(ch)引的一个最重要的因素。得Z上速度的方法是Q在各个select语句前加Q?/p><pre>declare @d datetime set @d=getdate()</pre> <p>q在select语句后加Q?/p><pre>select [语句执行p旉(毫秒)]=datediff(ms,@d,getdate())</pre> <p>2、只要徏立烦(ch)引就能显著提高查询速度<br />  事实上,我们可以发现上面的例子中Q第2?条语句完全相同,且徏立烦(ch)引的字段也相同;不同的仅是前者在fariqi字段上徏立的是非聚合索引Q后者在此字D上建立的是聚合索引Q但查询速度却有着天壤之别。所以,q是在M字段上简单地建立索引p提高查询速度?br />  从徏表的语句中,我们可以看到q个有着1000万数据的表中fariqi字段?003个不同记录。在此字D上建立聚合索引是再合适不q了。在现实中,我们每天都会(x)发几个文Ӟq几个文件的发文日期q同,q完全符合徏立聚集烦(ch)引要求的Q?#8220;既不能绝大多数都相同Q又不能只有极少数相?#8221;的规则。由此看来,我们建立“适当”的聚合烦(ch)引对于我们提高查询速度是非帔R要的?br /><br />3、把所有需要提高查询速度的字D都加进聚集索引Q以提高查询速度<br />  上面已经谈到Q在q行数据查询旉M开字段的是“日期”q有用户本n?#8220;用户?#8221;。既然这两个字段都是如此的重要,我们可以把他们合qv来,建立一个复合烦(ch)引(compound indexQ?br />  很多为只要把M字段加进聚集索引Q就能提高查询速度Q也有h感到qhQ如果把复合的聚集烦(ch)引字D分开查询Q那么查询速度?x)减慢吗Q带着q个问题Q我们来看一下以下的查询速度Q结果集都是25万条数据Q:(x)Q日期列fariqi首先排在复合聚集索引的v始列Q用户名neibuyonghu排在后列Q:(x)</p><pre>Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5'' </pre> <p>查询速度Q?513毫秒</p><pre>Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen             where fariqi>''2004-5-5'' and neibuyonghu=''办公?'</pre> <p>查询速度Q?516毫秒</p><pre>Q?Qselect gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公?'</pre> <p>查询速度Q?0280毫秒<br /><br />  从以上试验中Q我们可以看到如果仅用聚集烦(ch)引的起始列作为查询条件和同时用到复合聚集索引的全部列的查询速度是几乎一L(fng)Q甚x用上全部的复合烦(ch)引列q要略快Q在查询l果集数目一L(fng)情况下)(j)Q而如果仅用复合聚集烦(ch)引的非v始列作ؓ(f)查询条g的话Q这个烦(ch)引是不vM作用的。当?dng)语??的查询速度一h因ؓ(f)查询的条目数一P如果复合索引的所有列都用上,而且查询l果的话,q样׃(x)形成“索引覆盖”Q因而性能可以辑ֈ最优。同Ӟ误住:(x)无论(zhn)是否经怋用聚合烦(ch)引的其他列,但其前导列一定要是用最频繁的列?br /><br /><strong>四、其他书上没有的索引使用l验ȝ</strong><br /><br />1、用聚合索引比用不是聚合索引的主键速度?br />  下面是实例语句:(x)Q都是提?5万条数据Q?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''</pre> <p>使用旉Q?326毫秒</p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen where gid<=250000</pre> <p>使用旉Q?470毫秒<br /><br />q里Q用聚合索引比用不是聚合索引的主键速度快了q?/4?br /><br />2、用聚合索引比用一般的主键作order by旉度快,特别是在数据量情况?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by fariqi</pre> <p>用时Q?2936</p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen order by gid</pre> <p>用时Q?8843<br /><br />  q里Q用聚合索引比用一般的主键作order byӞ速度快了3/10。事实上Q如果数据量很小的话Q用聚集索引作ؓ(f)排序列要比用非聚集索引速度快得明显的多Q而数据量如果很大的话Q如10万以上,则二者的速度差别不明显?br /><br />3、用聚合烦(ch)引内的时间段Q搜索时间会(x)按数据占整个数据表的癑ֈ比成比例减少Q而无合烦(ch)引用了多少个:(x)</p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-1-1''</pre> <p>用时Q?343毫秒Q提?00万条Q?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi>''2004-6-6''</pre> <p>用时Q?170毫秒Q提?0万条Q?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen where fariqi=''2004-9-16''</pre> <p>用时Q?326毫秒Q和上句的结果一模一栗如果采集的数量一P那么用大于号和等于号是一L(fng)Q?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen             where fariqi>''2004-1-1'' and fariqi<''2004-6-6''</pre> <p>用时Q?280毫秒<br /><br />4、日期列不会(x)因ؓ(f)有分U的输入而减慢查询速度<br />  下面的例子中Q共?00万条数据Q?004q??日以后的数据?0万条Q但只有两个不同的日期,日期_到日Q之前有数据50万条Q有5000个不同的日期Q日期精到U?/p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen           where fariqi>''2004-1-1'' order by fariqi</pre> <p>用时Q?390毫秒</p><pre>select gid,fariqi,neibuyonghu,reader,title from Tgongwen             where fariqi<''2004-1-1'' order by fariqi</pre> <p>用时Q?453毫秒<br /><br /><strong>五、其他注意事?/strong><br /><br />  “水可载舟Q亦可覆?#8221;Q烦(ch)引也一栗烦(ch)引有助于提高?gu)(g)索性能Q但q多或不当的索引也会(x)Dpȝ低效。因为用户在表中每加q一个烦(ch)引,数据库就要做更多的工作。过多的索引甚至?x)导致?ch)引碎片?br />  所以说Q我们要建立一?#8220;适当”的烦(ch)引体p,特别是对聚合索引的创建,更应_求精Q以使?zhn)的数据库能得到高性能的发挥?br />  当然Q在实践中,作ؓ(f)一个尽职的数据库管理员Q?zhn)q要多测试一些方案,扑և哪种Ҏ(gu)效率最高、最为有效?/p></span></span><img src ="http://m.shnenglu.com/AutomateProgram/aggbug/147076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/AutomateProgram/" target="_blank">漂漂</a> 2011-05-25 11:17 <a href="http://m.shnenglu.com/AutomateProgram/archive/2011/05/25/147076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu避免mysql中文qhttp://m.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.html漂漂漂漂Tue, 03 May 2011 05:36:00 GMThttp://m.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.htmlhttp://m.shnenglu.com/AutomateProgram/comments/145558.htmlhttp://m.shnenglu.com/AutomateProgram/archive/2011/05/03/145558.html#Feedback0http://m.shnenglu.com/AutomateProgram/comments/commentRss/145558.htmlhttp://m.shnenglu.com/AutomateProgram/services/trackbacks/145558.html在Ubuntu 下配|?Mysql 的字W编码。安装完 Mysql 后,pȝ默认的字W编码是 latin1 Q输入的是中文,可是输出却是一堆ؕ码。现在要做的是?Mysql的默认字W编码设|ؓ(f)支持中文的编码,?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


在创时用如下命o(h)Q?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 发表评论
]]>
8090Ʒþһ| պAVþһ| 99þó˹Ʒ| þþƷ91þۺ鶹| ŷAŷaþ | þþþAVվ | ˾ƷۺϾþþþ| þþþó˾ƷĻ| 66ƷۺϾþþþþþ| ŷƷ˿þþĻ| պ뾫Ʒþһ | Ʒ91þþþþþ| þǿdŮվ| AVݺɫۺϾþ| ˾þۺӰԺ| Ʒþþþþø69| һɫþ88ۺպƷ| þþƷվ| ŷѹۿþ| þùŮѹۿƷ| һþ| þ޴ɫĻþþ| ŷѹۿþ| Ѿþþþþ| þþƷݲݲ| þѾƷav| Ʒ׾þAAAƬ69| ԸߺþþþþþþAAAAA | þֻоƷþ| ˾þþAV츾ɫ| vĻþ| þþƷվ| þõӰ| ԾþþӰԺ| þĻר| þþþ?V| þþƷ޾Ʒŷ| þþƷŷպþ| þԾƷ| þþƷAV㽶| ھƷþþþӰԺ޹² |