﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-这个城市就像一个绞肉机，而我只是其中无足轻重的肉屑，拼命地在齿轮与齿轮之间挣扎，以免被轧成肉末...-随笔分类-Ibatis</title><link>http://www.blogjava.net/gpswyk/category/21968.html</link><description>------------------------郁闷的日子----for my dream</description><language>zh-cn</language><lastBuildDate>Tue, 19 Jun 2007 15:38:06 GMT</lastBuildDate><pubDate>Tue, 19 Jun 2007 15:38:06 GMT</pubDate><ttl>60</ttl><item><title>几个使用索引和视图时的技巧</title><link>http://www.blogjava.net/gpswyk/archive/2007/06/19/125154.html</link><dc:creator>gpswyk</dc:creator><author>gpswyk</author><pubDate>Tue, 19 Jun 2007 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/gpswyk/archive/2007/06/19/125154.html</guid><wfw:comment>http://www.blogjava.net/gpswyk/comments/125154.html</wfw:comment><comments>http://www.blogjava.net/gpswyk/archive/2007/06/19/125154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gpswyk/comments/commentRss/125154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gpswyk/services/trackbacks/125154.html</trackback:ping><description><![CDATA[<p>l 对于小表来说使用索引对于性能不会有任何提高<br>2 当你的索引列中有极多的不同的数据和空值时索引会使性能有极大的提高<br>3 当查询要返回的数据很少时索引可以优化你的查询比较好的情况是少于全部数据的<br>25% 如果你要返回的数据很多时索引会加大系统开销<br>4 索引可以提高数据的返回速度但是它使得数据的更新操作变慢在对记录和索引进<br>行更新时请不要忘记这一点如果要进行大量的更新操作在你执行更新操作时请不<br>要忘记先删除索引当执行完更新操作后只需要简单的恢复索引即可对于一次特<br>定的操作系统可以保存删除的索引18 个小时在这个时间内数据更新完后你可以恢<br>复它<br>5 索引会占用你的数据库的空间如果你的数据库管理系统允许你管理数据库的磁盘空<br>间那么在设计数据库的可用空间时要考虑索引所占用的空间<br>6 对字段的索引已经对两个表进行了归并操作这一技术可以极大地提高归并的速度<br>7 大多数数据库系统不允许你对视图创建索引如果你的数据库系统允许这样做那么<br>可以使用这种方法来在SELECT 语句中对视图的数据进行排序很不巧一些数据库<br>系统中也不允许在视图中使用ORDERY BY 子句<br>8 不要创建对经常需要更新或修改的字段创建索引更新索引的开销会降低你所期望获<br>得的性能<br>9不要将索引与表存储在同一个驱动器上分开存储会去掉访问的冲突从而使结果返回<br>得更快<br>------------------------------------------------------------<br>1选择唯一值最多的列建立索引可以达到你所希望的性能<br>&nbsp;<br>2一个索引可以包含多个列通常是指复合索引复合索引的性能与单个字段的索引相比<br>是无法断定的以ORACLE 为例如果你在查询条件中经常指定某一特定的列那个你<br>可以创建这个列的索引而当你的查询需要复合条件时你可以创建复合索引当创建<br>多个索引的时候你需要参考你所选定的解释器的帮助信息以从中得到确定的复合索引<br>的用法</p>
<p>3当使用复合索引时要把最可能选择的字段放在前边也<br>就是说把你最经常在查询中使用是字段放在最前边在CREATE INDEX 中列的出现次<br>序不必与表中的次序一致</p>
<p>4视图主要用于以下方面<br>&nbsp;提高用户数据的安全性<br>&nbsp;进行单位换算<br>&nbsp;创建一个新格式的虚表<br>&nbsp;使复杂查询的构筑简单化</p>
<p>5索引也是一种数据库设计和SQL 编程的工具索引是一种存储在你的数据库管理系统<br>中的物理对象它可以让你的查询更快地从数据库中返回数据此外索引是可以定制的<br>正确地在查询中使用索引可以使性能显著地提高</p>
<p>6问:如果数据已经在我的数据库中进行了排序我是否还有必须在表中使用索引<br>答:索引通过在树结构中查找关键值而提高你的数据库查询性能它比对数据库的顺序访<br>方式快得多记住SQL 不需要知道你的数据库是否已经进行了排序<br>问:我可以创建一个包括多个表中字段的索引吗<br>答:你不能但是以ORACLE 为例它允许你创建一个群集你可以将表放入群集中以<br>根据表的共有字段创建一个群集索引这是它的一个例外所有你应该查看你所使用<br>的解释器的文档以找到这方法的详细解答</p>
<p>7在视图的SELECT 语句中使用约束是必然的在使用SELECT 语句中可以应用下边这<br>两个规则<br>&nbsp;你不能使用UNION 操作<br>&nbsp;你不能使用ORDER BY 子句但是在视图中使用GROUP BY 子句可以有ORDER<br>BY 子句相同的功能</p>
<p>8在视图中修改数据的几个问题<br>你大概已经看到了视图其实就是一组表的映射所以想要修改下层表的数据并不会<br>总是像上例那样直接下面给出了你在使用视图进行工作时常用会遇到的限制<br>(1)对于多表视图你不能使用DELETE 语句<br>(2)除非底层表的所有非空列都已经在视图中出现否则你不能使用INSERT 语句<br>有这个限制的原因是SQL 不知道应该将什么数据插入到NOT COLUMNS 限制列<br>中没有在视图中出现的<br>(3)如果对一个归并的表格插入或更新记录那么所有被更新的记录必须属于同一个<br>物理表<br>(4)如果你在创建视图时使用了DINTINCT 子句那么你就不能插入或更新这个视图<br>中的记录<br>(5)你不能更新视图中的虚拟列它是用计算字段得到了</p>
<img src ="http://www.blogjava.net/gpswyk/aggbug/125154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gpswyk/" target="_blank">gpswyk</a> 2007-06-19 17:20 <a href="http://www.blogjava.net/gpswyk/archive/2007/06/19/125154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>