MYSQL网页编程之ORACLE SQL功能优化系列 (八)
要想在MySQL与其他数据库之间进行一个面面俱到的功能设置对比,并不是一件容易的MySQL学习教程。随着新软件版本的发布或一些补丁的推出。oracle|功能|优化25.用索引进步效力
索引是表的一个观点部分,用来进步检索数据的效力.实践上,ORACLE利用了一个庞大的自均衡B-tree布局.一般,经由过程索引查询数据比全表扫描要快.当ORACLE找出实行查询和Update语句的最好路径时,ORACLE优化器将利用索引.一样在联合多个表时利用索引也能够进步效力.另外一个利用索引的优点是,它供应了主键(primarykey)的独一性考证.
除那些LONG或LONGRAW数据范例,你能够索引几近一切的列.一般,在年夜型表中利用索引出格无效.固然,你也会发明,在扫描小表时,利用索引一样能进步效力.
固然利用索引能失掉查询效力的进步,可是我们也必需注重到它的价值.索引必要空间来
存储,也必要按期保护,每当有纪录在表中增减或索引列被修正时,索引自己也会被修正.这意味着每笔记录的INSERT,DELETE,UPDATE将为此多支付4,5次的磁盘I/O.由于索引必要分外的存储空间和处置,那些不用要的索引反而会使查询反响工夫变慢.
译者按:
按期的重构索引是有需要的.
ALTERINDEX<INDEXNAME>REBUILD<TABLESPACENAME>
26.索引的操纵
ORACLE对索引有两种会见形式.
索引独一扫描(INDEXUNIQUESCAN)
年夜多半情形下,优化器经由过程WHERE子句会见INDEX.
比方:
表LODGING有两个索引:创建在LODGING列上的独一性索引LODGING_PK和创建在MANAGER列上的非独一性索引LODGING$MANAGER.
SELECT*
FROMLODGING
WHERELODGING=‘ROSEHILL’;
在外部,上述SQL将被分红两步实行,起首,LODGING_PK索引将经由过程索引独一扫描的体例被会见,取得绝对应的ROWID,经由过程ROWID会见表的体例实行下一步检索.
假如被检索前往的列包含在INDEX列中,ORACLE将不实行第二步的处置(经由过程ROWID会见表).由于检索数据保留在索引中,单单会见索引就能够完整满意查询了局.
上面SQL只必要INDEXUNIQUESCAN操纵.
SELECTLODGING
FROMLODGING
WHERELODGING=‘ROSEHILL’;
索引局限查询(INDEXRANGESCAN)
合用于两种情形:
1.基于一个局限的检索
2.基于非独一性索引的检索
例1:
SELECTLODGING
FROMLODGING
WHERELODGINGLIKE‘M%’;
WHERE子句前提包含一系列值,ORACLE将经由过程索引局限查询的体例查询LODGING_PK.因为索引局限查询将前往一组值,它的效力就要比索引独一扫描
低一些.
例2:
SELECTLODGING
FROMLODGING
WHEREMANAGER=‘BILLGATES’;
这个SQL的实行分两步,LODGING$MANAGER的索引局限查询(失掉一切切合前提纪录的ROWID)和下一步同过ROWID会见表失掉LODGING列的值.因为LODGING$MANAGER是一个非独一性的索引,数据库不克不及对它实行索引独一扫描.
因为SQL前往LODGING列,而它其实不存在于LODGING$MANAGER索引中,以是在索引局限查询后会实行一个经由过程ROWID会见表的操纵.
WHERE子句中,假如索引列所对应的值的第一个字符由通配符(WILDCARD)入手下手,索引将不被接纳.
SELECTLODGING
FROMLODGING
WHEREMANAGERLIKE‘%HANMAN’;
在这类情形下,ORACLE将利用全表扫描.
(待续)
表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。 SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。 习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情 SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)
页:
[1]