|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
要想在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无需扫描任何记录即可迅速得到目标记录所在的位置。 |
|