`
luodaijun
  • 浏览: 3445 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

没有 Fast=true的选项(求求你,别再说索引比全表扫描快了)

阅读更多
没有fast=true的设置,有人说or 比 in 好,exists 比in 好,索引比全表扫描好,分区能提高查询效率,但是分区要降低插入效率

我要说的是,没有fast=true的选项, 如果能找到一步,或者几步公式化的方法能提高效率,那么优化器自己就会做了,根本不用用户担心。

假设 or比in好,数据库优化器把in语法和or语法走的执行计划一样就可以了,何必折磨用户呢。

说点实际的,很多人张嘴就说,SQL优化就是避免全表扫描,不知道大家有没有了解过索引查找的原理.索引查找数据,有两步要做,第一步是索引中快速查询,索引里只存储了对应表数据的rowid, 所以还有第二步,根据rowid去得到全部的数据, 所以需要一次磁盘i/o, 不要小看磁盘I/O,通过索引查询出的结果比较多的时候,磁盘i/o的时间是非常大的,这个时候比全表扫描慢得多, 实际上,oracle 10g基于成本的优化器(CBO),选择性不高的索引,优化器根本不会使用,而自动采用全表扫描的方式来做. 

某个选项设置,某个方法,都是一定前提,一定环境下才适用的。
分享到:
评论
6 楼 logicgate 2009-04-20  
根据oracle的training ppt,当返回行数少于表总行数的4%的时候,使用索引才是最恰当的。
5 楼 魔力猫咪 2009-04-17  
bluemeteor 写道
魔力猫咪 写道
不错。大数据量读取全表比索引要好得多。


可以详细展开说一下么?单指oracle还是所有数据库都是这样?或说在某种条件下?在mysql中千万记录的全表和index是不同数量级的,或者我理解错了?望详解……

这是指你一次要读取几百甚至上千条纪录的情况。注意:不是查询,而是要读出来。比如你要从10000条记录中读取1000条的结果集(所有字段)。这种情况下你用索引还不如全表快。因为数据太多了。全表找到一条,就把这条的结果取出来了。索引要先走一遍索引,然后根据结果再一条一条到表里取,速度反而慢下来了。
4 楼 robbin 2009-04-17  
这是一个基本道理,用不着这么标题党了吧。

索引怎么建当然要看具体情况具体分析,本来就不存在放之四海而皆准的道理,比方说如果你索引的字段重复数据很多的话,当然索引还不如不建,例如用户的性别字段,不是男就是女,你给这种字段建索引,那就是纯粹找抽,这就是楼主想表达的中心思想。
3 楼 bluemeteor 2009-04-17  
魔力猫咪 写道
不错。大数据量读取全表比索引要好得多。


可以详细展开说一下么?单指oracle还是所有数据库都是这样?或说在某种条件下?在mysql中千万记录的全表和index是不同数量级的,或者我理解错了?望详解……
2 楼 LifeFree 2009-04-17  
非常同意
引用
某个选项设置,某个方法,都是一定前提,一定环境下才适用的。


如:in和exists 到底有没有区别,还是根据具体数据库,具体sql语句等情况有不同。简单查看一下执行计划是比较好的办法(这里把执行计划变化的因素暂不考虑)。

千万不要成为Voodoo数据库专家,大道不走,老总结一些过时的、或时而灵验时而不灵的歪招。

1 楼 魔力猫咪 2009-04-17  
不错。大数据量读取全表比索引要好得多。而且索引过多造成的插入、修改和删除性能下降相当厉害。
到处乱建索引的话,索引的空间甚至比表还大。造成性能和维护成本都受影响。所以性能有风险,索引要谨慎。

相关推荐

    django模型类中,null=True,blank=True用法说明

    在Django框架中,模型(Model)是用来定义数据库表结构的类。在这些模型类中,`null=True`和`blank=True`是两个常见的属性,它们分别用来处理字段的空值行为,但作用的范围不同。 1. `null=True` 当在模型的字段...

    FastAPI 学习之路(六十一)使用mysql数据库替换sqlite数据库.pdf

    在本篇《FastAPI 学习之路(六十一)使用mysql数据库替换sqlite数据库》中,我们将探讨如何将FastAPI应用程序的数据库从SQLite切换到MySQL。SQLite是一个轻量级的、文件存储的数据库引擎,适用于小型项目或开发环境...

    maven打包跳过test命令.docx

    在Maven中,如果你想在打包时跳过测试阶段(即不执行mvn test),你可以使用-DskipTests或-Dmaven.test.skip=true选项。这两个选项在功能上略有不同,但通常用于达到相同的目的,即跳过测试。 使用-DskipTests 当你...

    函数索引使用

    未使用函数索引时,执行计划选择了全表扫描(FULL TABLE SCAN)的方式,而使用函数索引后,优化器选择了索引范围扫描(INDEX RANGE SCAN)。 ```sql SQL> SELECT count(*) FROM sale_contacts WHERE UPPER(surname) ...

    pandas索引操作及高级索引之重置索引.pptx

    如果新索引中存在原索引中没有的值,那么数据将被填充为`NaN`(Not a Number)。为了处理这种情况,`reindex()`提供了几个参数: 1. `Index`: 这是用于创建新索引的序列。 2. `limit`: 当填充缺失值时,限制前向或...

    vs c#用按钮实现选项卡功能的例子

    在Visual Studio 2010(VS2010)中,C#是一种常用的编程语言,用于开发Windows桌面应用...通过实践这个例子,你不仅能够学会如何在C#中创建简单的选项卡功能,还能加深对Windows Forms编程的理解,提升你的编程技能。

    操作系统磁盘移动臂调度算法

    int Elevator(bool bShowTrack=true);//电梯调度算法,返回磁头扫过的柱面数。 int FCFSVisit(bool bShowTrack=true);//先来先服务调度算法 int SSTFVisit(bool bShowTrack=true);//最短查找时间调度算法 int ...

    pandas表连接 索引上的合并方法

    举一个具体的例子,假设有两个DataFrame对象`left2`和`right2`,它们的行索引不同,但通过`left_index=True`和`right_index=True`,以及`how='outer'`参数,我们可以实现两个DataFrame的行索引全外连接: ...

    FAST角点检测python实现及基于opencv实现

    - **检测速度**:FAST算法非常快,因为它只需要检查有限数量的像素,而不是对整个图像进行逐像素扫描。 - **关键点描述符**:找到角点后,通常还需要一个描述符来区分不同的角点,如ORB(Oriented FAST and Rotated...

    Lucene3.0创建索引

    ### Lucene3.0创建索引 在Lucene3.0中创建索引是一个关键功能,可以帮助用户快速地检索和管理大量的文本数据。本篇文章将详细介绍如何使用Lucene3.0来创建索引,并通过一个具体的例子来演示整个过程。 #### 一、...

    算法:给定一个链表,判断链表中是否存在环

    - 当快指针或快指针的下一个节点为`NULL`时,说明链表无环; - 当快指针与慢指针相遇时,说明链表有环。 #### 四、多种编程语言实现 针对题目要求,我们可以用Python、Java和C语言实现快慢指针算法来检测链表中...

    Hibernate 与 Lucene 的整合框架详解

    - **索引更新策略**:可以通过 `<property name="hibernate.search.default.autoindexing" value="true"/>` 来开启自动索引更新功能。 #### 四、总结 通过以上介绍可以看出,利用 Hibernate 和 Lucene 进行整合,...

    lucence 索引合并 汇总

    ### Lucene索引合并知识点详解 #### 一、Lucene简介 Apache Lucene是一个高性能、全功能的文本搜索引擎库。它提供了一套完整的文本搜索功能,包括全文检索、索引创建与管理等,并且可以非常方便地嵌入到Java应用...

    lucene.net 2.9.2 实现索引生成,修改,查询,删除实例

    但如果你只想删除单个文档,可以按照上述“索引修改”部分的方法进行操作。如果需要完全删除索引,可以使用以下代码: ```csharp directory.Delete(); ``` **Demo项目** 压缩包中的"Demo"文件可能包含了完整的...

    Python DataFrame 设置输出不显示index(索引)值的方法

    参数index默认情况下是True,意味着如果在调用to_csv时不添加index参数,或者直接写为index=True,那么导出的CSV文件中将包含索引列。而设置为index=False后,输出的CSV文件就不会有索引列。 例如,假设我们有一个...

    MongoDB学习笔记(六) MongoDB索引用法和效率分析

    MongoDB是一种流行的NoSQL数据库,它的索引机制与传统的关系型数据库类似,旨在提升查询和排序的速度。在MongoDB中,索引对于优化查询性能至关重要,尤其在处理大量数据时。下面将详细介绍MongoDB中不同类型的索引...

    VS2010 用OracleClient连接Oracle数据库

    Unicode=True";//定义一个字符串用来保存连接数据库的字符串 OracleConnection con = new OracleConnection(str);//定义数据库的字符串 OracleCommand cmd = con.CreateCommand();//定义连接数据库的命令 cmd....

    oracle sql 培训

    例如,如果发现Oracle未使用索引或选择了全表扫描,可能是因为统计信息不准确或没有合适的索引。通过分析和调整,可以创建更适合查询的执行计划,从而提高系统的整体性能。 总之,Oracle SQL的调优是一门深奥的学问...

Global site tag (gtag.js) - Google Analytics