-
在表上创建索引以提高性能
2012-07-21 16:43:001. 索引是什么 1. 索引是什么 ...使用索引时,数据以一种分类排序的方式提供给用户,排列顺序可以用CREATE INDEX语句控制。通常,通过在合适的字段上建立索引,可以显著提供性能,特别是在表之间1. 索引是什么
1. 索引是什么
1. 索引是表示数据的一种方式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序。索引的特殊作用是在表内重新排列记录的物理位置。索引基于表的一列或多列的组合建立。使用索引时,数据以一种分类排序的方式提供给用户,排列顺序可以用CREATE INDEX语句控制。通常,通过在合适的字段上建立索引,可以显著提供性能,特别是在表之间的连接字段上建立索引。
2. 可以使用两种方法从数据库中检索数据。第一种方法,通常称为顺序存取法,要求SQL扫描记录下来寻找与条件匹配的记录。这种查询方式效率很低,但它是SQL寻找正确记录的唯一方法。回想一下过去图书馆里大量卡片目录把图书归档的时代,假设图书管理员把按字母排列的索引卡片拿出来,打乱它们的次序,然后把他们放回装卡片的抽屉中。那么当想查找某本书的架位时,就需要从最开始一张一张地查看,直到找到想要的图书为止(一旦发现该书,就停止查找)。现在假设图书管理员讲图书按书名的字母分类,可以通过字母很快地找到有关这本书的信息。进一步设想,如果管理员很勤快,他不仅按书名把图书分类,而且还按作者姓名和图书主题的顺序分别建立了另外的目录。这个过程将给图书用户在检索信息时提供很大的灵活性,而且能够用比原来少得多的时间检索到需要的信息。
3. 在数据库中增加索引,使SQL能够使用直接存取法访问数据。SQL使用树状结构存储和检索索引的数据。数据组的指针存储在树的顶端,这些组成为节点。每个节点都包含指向其他节点的指针。指针指向的左端节点包含的值小于它们父节点的值;右端的值则大于父节点的值。数据库系统从顶端节点开始查询,并简单地按照指针查询下去,知道成功为止。
4. 对无索引的表进行的查询,一般称为全表扫描。全表扫描是数据库服务器用来搜寻表的每一行、直到所有符合给定条件的行返回为止的过程。
5. 如果选择建立了索引的列名,可以看到该列中的数据实际上被排序显示。
6. 当一个表被删除时,所有伴随该表的索引也被删除
2. 使用索引的技巧
1. 对于小的表,使用索引不会得到任何性能的改善。
2. 在数据变化幅度较大的列上建立索引,会产生最大限度的性能改善。
3. 当查询返回少量的数据时,索引能够优化查询(根据经验,返回数据的数据量最好少于总数据量的25%)。如果经常返回大量的数据,那么索引会增加额外开销。
4. 索引能提高数据检索的速度。然而,他们却使数据更新的速度减慢。在带有索引的一行中做许多插入、删除或更新操作时,要特别记住这点。对于大量的插入、删除或更新,可以考虑在实施修改时删除索引,在完成插入、删除或更新后,再重建索引。对于特定的修改,删去索引并在载入数据后重建索引,可能回节省程序员的时间。
5. 索引在数据库内占用空间。如果正在使用的数据库管理系统能够管理数据库占据的磁盘空间,则在规划数据大小时,索引的大小是个考虑因素。
6. 通常总是在那些勇于两表间连接的字段上建立索引,这样可以大大地提高连接的速度。
7. 大多数数据库系统不允许在一个视图上建立视图,并在该视图内对数据排序(许多系统也不允许CREATE VIEW语句带有ORDER BY子句)。
8. 不要在进行定期更新或修改的字段上建立索引。需要不断更新的索引导致的额外消耗,将抵消期望得到的任何性能上的改进。
9. 不要在同一物理介质上同时存储索引和表。分开存储这些对象可以避免驱动器争用,并使查询速度更快。
10. 索引不应在具有大量空值(null)的列上使用。
3. 在多个字段上建立索引
1. SQL允许在多个字段上建立索引,这种索引称为复合索引。
2. 性能改进的程度如何,将决定是使用单列索引还是使用复合索引。例如,如果大部分查询都由一个特定的列作为查询条件的一部分,你也许会决定使用单列索引;另一方面,如果那些被索引的列经常被一起用作查询的条件,你也许会建立一个复合索引。
2. 使用带有UNIQUE关键字的CREATE INDEX语句
1. 由于主键中的每个值必须是唯一的,如果为表指定主键,则数据库讲隐含地创建索引。主键和唯一约束都使系统生产索引。
3. 索引与连接
1. 当查询中使用复杂的连接时,select语句会花费很长时间。对于大表,这个时间可能接近几秒。在具有多个用户的客户机/服务器环境中,这类操作会令应用程序的用户及其沮丧。在经常用于连接的字段上建立索引,可以大大优化查询性能。然而,如果建立太多的索引,可能会使系统的性能建立,而不是使速度提高。建议在一些大表(有数千条记录的表)上使用索引。这类试验会使你加深对SQL语句优化的理解。
4. 使用聚簇索引
1. 当表被使用聚簇索引时,数据存储在同一数据块中,这样就只允许极少的数据库块读取从而导致更快的执行性能。当使用聚簇索引时,表内数据的物理排列将被修改。使用聚簇索引通常可以使数据检索速度比使用传统的非聚簇索引更快。创建聚簇索引基于将被加入聚簇索引的表,然后将这些表加入聚簇索引。然后将这些表加入聚簇索引。应该只将那些经常被连接的表加入聚簇中,不要将那些通过简单的select语句单独访问的表加入聚簇索引中。
-
经典全面的SQL语句大全
2009-11-23 16:31:09创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明: 创建视图:create view viewname as select ... -
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串
2017-05-06 20:26:52 数据查询语言 (Data Query Language, DQL) 是SQL语言中,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。例如:SELECT(查询) 数据控制语言Data Controlling Language(DCL),用来... -
PHP基础教程 是一个比较有价值的PHP新手教程!
2010-04-24 18:52:44你可以用以下的语句来为一个数值赋值: $a = 1234; # 十进制数 $a = -123; # 负数 $a = 0123; # 八进制数 (等于十进制数的83) $a = 0x12; # 十六进制数(等于十进制数的18) $a = 1.234; # 浮点数"双精度数" $a = 1.2... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--详细书签版
2013-02-04 12:43:5212.1.1 什么时候使用索引 335 12.1.2 列的选择 337 12.1.3 空值问题 338 12.2 索引结构类型 339 12.2.1 B-树索引 339 12.2.2 位图索引 340 12.2.3 索引组织表 341 12.3 分区索引 343 12.3.1 局部索引 343 ... -
Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码
2013-02-04 12:49:3312.1.1 什么时候使用索引 335 12.1.2 列的选择 337 12.1.3 空值问题 338 12.2 索引结构类型 339 12.2.1 B-树索引 339 12.2.2 位图索引 340 12.2.3 索引组织表 341 12.3 分区索引 343 12.3.1 局部索引 343 ... -
4.1.5 用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 4.1.6 JAVA8的ConcurrentHashMap为什么放弃了分段锁,有...
-
Oracle Database 9i10g11g编程艺术:深入数据库体系结构(第2版)--详细书签版
2013-02-03 11:42:53并利用具体的例子来全面介绍每个特性,不仅讨论了各个特性是什么,还说明了它是如何工作的,如何使用这个特性来开发软件,以及有关的常见陷阱。 本书面向所有oracle 数据库应用开发人员和dba。 作译者 作者 ... -
Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50)--详细书签版
2013-02-06 18:24:20涵盖了所有最重要的Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体的例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:454.8.6 用SQL*Plus创建网页 103 4.9 主要的SQL*Plus数据库管理命令 104 4.9.1 RECOVER命令 104 4.9.2 STARTUP和SHOUTDOWN命令 104 4.9.3 ARCHIVE LOG命令 104 4.10 用SQL生成SQL 104 4.11 Oracle SQL ... -
java面试题典 java 面试题 经典
2010-06-18 13:42:3625. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是quals()? 它们有何区别 11 26. 构造器Constructor是否可被override?是否可以继承String类? 11 27. swtich是否能作用在byte上,是否能作用... -
java 面试题 总结
2009-09-16 08:45:34为了提高性能,在软件发布后,assertion检查通常是关闭的。 24、GC是什么? 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04为了提高性能,在软件发布后,assertion检查通常是关闭的。 27、GC是什么? 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或... -
net学习笔记及其他代码应用
2010-11-16 18:15:0911.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层... -
2009达内SQL学习笔记
2010-02-10 19:46:58ORDER BY子句中使用的列将是为显示所选择的列,但是实际上并不一定要这样,用非检索的列排序数据是完全合法的。 为了按多个列排序,列名之间用逗号分开。 2、支持按相对列位置进行排序。 输入 SELECT prod_id,... -
SQL Server编程必知必会(Amazon全五星评价)--详细书签版
2013-02-06 13:55:14无论是用在小型开发项目上,还是用来构建那些声名显赫的网站, SQL Server都证明了自己是个稳定、可靠、快速、可信的系统,足以胜任任何数据存储业务的需要。. 本书基于我的一本畅销书Sams Teach Yourself SQL in... -
JAVA面试题最全集
2010-03-13 13:09:10多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端与服务器的通信的过程 60.JAVA语言国际化应用,Locale类,Unicode 61.描述反射机制的作用 62.如何读写一个... -
MySQL命令大全
2018-01-15 11:19:174.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度 5.BLOB TEXT类型,最大长度为(2^16-1)个字符。 6.VARCHAR型:变长字符串类型 5.导入数据库表 ()创建.sql文件 ()先产生... -
SQL语法大全
2014-03-30 11:00:11Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: ----------------------------------------------------... -
MySQL必知必会(Amazon全五星评价)--详细书签版
2013-02-05 16:15:59无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定、可靠、快速、可信的系统,足以胜任任何数据存储业务的需要。. 本书基于我的一本畅销书Sams Teach Yourself SQL in 10 ... -
php高级开发教程说明
2008-11-27 11:39:22行是干什么用的,它们在什么条件下执行,它们所要求的设置。即使你缺乏背景知识,遇到了 一个错综复杂的算法,你也能很快看出它所从事的任务,以及它的风格。 举个例子,然后说“照着做”总是很容易的,但我想这一章... -
MYSQL常用命令大全
2011-05-30 13:31:244.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度 5.BLOB TEXT类型,最大长度为65535(2^16-1)个字符。 6.VARCHAR型:变长字符串类型 5.导入数据库表 (1)创建.sql文件 (2)... -
Oracle 数据库管理艺术:11g新特性(世界级Oracle专家权威力作)--详细书签版
2013-02-06 17:57:473.5.2 增强的联机索引创建和重建 120 3.5.3 增强的默认列值功能 120 3.5.4 联机重组实体化视图 121 3.5.5 使依赖对象的无效性最小化 121 3.6 Oracle增强的表压缩选项 122 3.6.1 新压缩特性的工作原理 122 ... -
JAVA上百实例源码以及开源项目源代码
2018-12-11 17:07:42在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天... -
JAVA上百实例源码以及开源项目
2016-01-03 17:37:40EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,... -
入门学习Linux常用必会60个命令实例详解doc/txt
2011-06-09 00:08:45mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者。 2.格式 mount -a [-fv] [-t vfstype] [-n] [-rw] [-F] device dir 3.主要参数 -h:显示辅助信息。 -v:显示信息,... -
Oracle DBA突击:帮你赢得一份DBA职位--详细书签版
2013-02-06 15:56:40第10章至第13章是高级篇,主要面向高级读者,高级dba通常要解决架构层面的问题,因此对于这部分读者来说,最重要的是要扩展眼界,能够掌握如何选择最合适的工具而不是最贵的工具。为了跳出单一产品的限制,本书选择... -
软件工程知识点
2012-12-02 21:34:25软件定义是软件项目的早期阶段,主要由软件系统分析人员和用户合作,针对有待开发的软件系统进行分析、规划和规格描述,确定软件是什么,为今后的软件开发做准备。这个时期往往需要分阶段地进行以下几项工作。 1.... -
数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)
2010-04-12 14:23:05需要FLUSH TABLES语句来确保开始备份前将所有激活的索引页写入硬盘。 备份数据库的另一个技术是使用mysqldump程序或mysqlhotcopy脚本。 1. 完全备份数据库: 2. shell> mysqldump --tab=/path/to/some/dir --opt db_...