精华内容
下载资源
问答
  • Oracle查询指定索引提高查询效率

    万次阅读 2009-01-13 16:37:00
    Oracle查询指定索引提高查询效率一个1600万数据表--短信上行表TBL_SMS_MO结构:CREATE TABLE TBL_SMS_MO( SMS_ID NUMBER, MO_ID VARCHAR2(50), MOBILE VARCHAR2(11), SPNUMBER VARCHAR2(20), MESSAGE VARCHAR...
     
    

    Oracle查询指定索引提高查询效率

    一个1600万数据表--短信上行表TBL_SMS_MO
    结构:
    CREATE TABLE TBL_SMS_MO
    (
     SMS_ID NUMBER,
     MO_ID VARCHAR2(50),
     MOBILE VARCHAR2(11),
     SPNUMBER VARCHAR2(20),
     MESSAGE VARCHAR2(150),
     TRADE_CODE VARCHAR2(20),
     LINK_ID VARCHAR2(50),
     GATEWAY_ID NUMBER,
     GATEWAY_PORT NUMBER,
     MO_TIME DATE DEFAULT SYSDATE
    );
    CREATE INDEX IDX_MO_DATE ON TBL_SMS_MO (MO_TIME)
      PCTFREE 10
      INITRANS 2
      MAXTRANS 255
      STORAGE
      (
        INITIAL 1M
        NEXT 1M
        MINEXTENTS 1
        MAXEXTENTS UNLIMITED
        PCTINCREASE 0
      );
    CREATE INDEX IDX_MO_MOBILE ON TBL_SMS_MO (MOBILE)
      PCTFREE 10
      INITRANS 2
      MAXTRANS 255
      STORAGE
      (
        INITIAL 64K
        NEXT 1M
        MINEXTENTS 1
        MAXEXTENTS UNLIMITED
        PCTINCREASE 0
      );


    问题:从表中查询某时间段内某手机发送的短消息,如下SQL语句:


    SELECT MOBILE,MESSAGE,TRADE_CODE,MO_TIME
    FROM TBL_SMS_MO
    WHERE MOBILE=''''130XXXXXXXX''''
    AND MO_TIME BETWEEN TO_DATE(''''2006-04-01'''',''''YYYY-MM-DD HH24:MI:SS'''') AND TO_DATE(''''2006-04-07'''',''''YYYY-MM-DD HH24:MI:SS'''')

    ORDER BY MO_TIME DESC

    返回结果大约需要10分钟,应用于网页查询,简直难以忍受。

     

    分析:

    在PL/SQL Developer,点击“Explain Plan”按钮(或F5键),对SQL进行分析,发现缺省使用的索引是IDX_MO_DATE。问题可能出在这里,因为相对于总数量1600万数据来说, 都mobile的数据是很少的,如果使用IDX_MO_MOBILE比较容易锁定数据。

     

    如下优化:

    SELECT /*+ index(TBL_SMS_MO IDX_MO_MOBILE) */ MOBILE,MESSAGE,TRADE_CODE,MO_TIME
    FROM TBL_SMS_MO
    WHERE MOBILE=''''130XXXXXXXX''''
    AND MO_TIME BETWEEN TO_DATE(''''2006-04-01'''',''''YYYY-MM-DD HH24:MI:SS'''') AND TO_DATE(''''2006-04-07'''',''''YYYY-MM-DD HH24:MI:SS'''')

    ORDER BY MO_TIME DESC

    测试:

    按F8运行这个SQL,哇~... ... 2.360s,这就是差别。

    ---------------------------------------------------------------------------------------------------------------

    虽然索引并不总会快于全表扫描,但是很多时候我们希望Oracle使用索引来执行某些SQL,这时候我们可以通过index hints来强制SQL使用index.

    Index Hints的格式如下:

    /*+ INDEX ( table [index [index]...] ) */

    我们简单看一下这个提示的用法(范例为Oracle10g数据库):

    SQL> create table t as select username,password from dba_users;
    Table created.
    SQL> create index i_t on t(username);
    Index created.
    SQL> set autotrace trace explain
    SQL> select /*+ index(t i_t) */ * from t where username='EYGLE';
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 2928007915
    ------------------------------------------------------------------------------------
    | Id  | Operation                   | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT            |      |     1 |    34 |     2   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T    |     1 |    34 |     2   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | I_T  |     1 |       |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       2 - access("USERNAME"='EYGLE')
    Note
    -----
       - dynamic sampling used for this statement 

    这里的查询使用了索引.

    需要注意的是使用CTAS方式创建数据表,新建表会继承原表的约束属性:

    SQL> desc t
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     USERNAME                                  NOT NULL VARCHAR2(30)
     PASSWORD                                           VARCHAR2(30) 

     

    如果不使用Hints,此处Oracle不会使用索引:

    SQL> select * from t where username='EYGLE';
    Execution Plan
    ----------------------------------------------------------
    Plan hash value: 1601196873
    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |     1 |    34 |     2   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| T    |     1 |    34 |     2   (0)| 00:00:01 |
    --------------------------------------------------------------------------
    Predicate Information (identified by operation id):
    ---------------------------------------------------
       1 - filter("USERNAME"='EYGLE')
    Note
    -----
       - dynamic sampling used for this statement 

    索引和全表扫描的选择和取舍并非简单,本文不作进一步探讨.


    展开全文
  • 利用索引提高查询效率

    千次阅读 2012-06-04 22:57:28
    如果查询结果仅为一行或很少几行时(高选择性high selectivity),利用索引进行查询会大大提高效率。相比之下,如果没有索引查询则只能顺序扫描整个表。在OLTP环境下,事务处理在很大程度上依赖于索引。只有在表很...

    如果查询结果仅为一行或很少几行时(高选择性high selectivity),利用索引进行查询会大大提高效率。相比之下,如果没有索引,查询则只能顺序扫描整个表。在OLTP环境下,事务处理在很大程度上依赖于索引。只有在表很小时,才会顺序扫描表。系统会根据SQL语句中的WHERE子句判断是否使用索引。顺序扫描表会使系统性能受到严重影响。sysmaster中sysptntab表中的pf_seqscnas列显示了所进行的顺序扫描。SET EXPLAIN命令同样可以提供关于SQL语句如何访问数据库中的重要信息。

    DSS环境中的应用经常会查询出大量数据(低选择性 low selecviity),甚至整张表。顺序扫描对于这样的查询更为适合,因为此时顺序扫描可以利用light scan。light scan缓冲区位于共享内存的虚拟段与驻留段无关。关于light scan,以后章节中还将详述。

    建立索引的代价

    虽然索引可以很大地提高高选择性查询的性能,但维护这些索引是需要付出代价的。 以INSERT语句为例,在进行插入时系统首先将读取被插入表的索引以定位新记录关键字的位置。然后系统在将新记录写入数据页的同时还必须将新索引项写入索引节点。如果导致索引节点分裂,系统则必须多次写索引页

    与INSERT语句相似,DELETE语句也要求读入整个索引以定位索引节点位置,并置上删除标志。在删除索引时还需要处理索引节点合并、整理等问题。

    在执行UPDATE语句时,必须首先定位并且删除旧的关键字然后插入新的关键字。所以在UPDATE语句必须两次读取索引。

    在实际系统中通常把索引的根节点和第一级节点读入共享内存中,但如果需要访问更低层次的索引节点则必须进行磁盘操作。

    索引类型

    通常建立分离索引(detached)或基于表达式的索引分片(expression based fragmented)。分离索引和分片索引可以使得索引的extent内页连续,因而能提高性能。而对于不分片的表来说,附加索引(attached)在建立索引时,索引页和数据页交叉存放在一起,因而会增加磁头寻找时间。

    对于中、小型表应该建立分离索引。对于经常访问的大表应建立基于表达式的分片索引,以减少索引页的数量和提高检索速度。索引分片不宜太多,以免表达式计算开销过大。根据索引的大小,一般可以分为4片。索引分片不支持轮转法(round robin)。

    分离式索引与数据页分别存放在不同的数据空间中。例如:

    CREATE INDEX index1 ON TABLE table_name(col1) in idxldbs;

    基于表达式的分片索引在FRAGMENT BY EXPRESSION 子句指定的数据空间中创建。例如:

    CREATE INDEX index1 on TABLE table_name(col1) FRAGMENT BY EXPRESSION
    col1>=0 and col1<=25000 in idxldbs1 col1>=25001 and col1<=50000 in idxldbs2
    col1>=50001 and col1<=75000 in idxldbs3 col1>=750001 and col1<= 100000 in idxldbs4;

    隐式索引

    在定义约束条件时如果没有可利用的索引,系统将创建隐式索引。用户不能对隐式索引指定数据空间的位置、分片策略或者填充因子。隐式索引创建在数据库(而非表)所在地数据空间中,这给磁盘管理和性能带来了一些影响。

    用户如果需要建立约束条件,最好能先创建与约束条件完全匹配的显式索引然后用ALTER TABLE命令增加约束条件。这样该约束条件就可以利用显式索引而不必再建立隐式索引。例如按如下方式:

    CREATE TABLE table_name( col1 INTEGER, col2 INTEGER, col3 CHAR(25), ) in tableldbs;
    CREATE unique INDEX index1 ON TABLE table_name(col1) in idxldbs;
    ALTER TABLE table_name ADD CONSTRAINT PRIMARYKEY(col1);

    而不要按如下方式:

    CREATE TABLE table_name( col1 INTEGER, col2 INTEGER, col3 CHAR(25), PRIMARY KEY (col1) ) in tableldbs;

    FILLACTOR(填充因子)

    对于SELECT操作,将FILLFACTOR 设为100

    对于SELECT 和DELETE操作将FILLFACTOR 设为100

    对于INSERT 和 UPDATE操作将FILLFACTOR设为50到70

    CREATE INDEX index1 ON TABLE table_name(col1) in idx1 dbs FILLFACTOR 70;

    填充因子决定了在建立索引时每一索引页的填充度。该参数是可以改变的。参数FILLFACTOR缺省值为90。如果只是改变某个索引的设置,请使用CREATE INDEX的FILLFACTOR子句。

    设置较大的填充因子可以使索引更紧凑、使缓冲区更有效同时也可以减少检索记录时读取的页数。对于只读表应将FILLFACTOR设置为100。

    对于只执行读和操作的表,如果将FILLFACTOR设置为100,在删除记录时可以减少合并索引节点、整理索引树的可能性。

    对于有大量插入和更新操作的表,应该将FILLFACTOR设置为50到70。由于填充因子较小,在插入和更新操作时将延迟索引节点(页面)的分裂,从而提高系统性能。 有如下的SQL FILLFACTOR例句:

    CREATE INDEX index1 ON TABLE table_name(col1) in idxldbs FILLFACTOR 70;

    建立索引的步骤

    建立索引必须遵循如下步骤:

    • 确定需要建立的索引
    • 决定索引的类型,分离索引还是分片索引。如果是分片索引,确定表达式
    • 为每一索引确定填充因子
    • 计算索引所需空间
    • 决定索引数据空间在磁盘上的位置
    • 为索引创建数据空间
    • 定髓临时数据空间大小和位置。临时数据空间最好能分布存储。
    • 利用DBSPACETEMP 设置临时数据空间的大小,利用onspace命令的-t选项创建临时数据空间
    • 设置环境变量PDQPRIORITY 和PSORT_NPROCS
    • 创建相应的配置文件。其中各选项的最优设置参见并行排序和载入环境

      配置参数

      建立索引时参数的优化设置与上一章载入环境中的设置相同。在此作一简单回顾:

      NUMCPUVPS 设置为CPU数目

      BUFFERS 设置尽量多的缓冲区。初始时应为缓冲区分配最多至25%的内存。?

      SHMVIRTSIZE 赋予初始段最大值。最多至可用内存的75%

      CKPTINTVL 3000。由物理日志决定何时生成检查点。

      LRUS 一个LRU队列对含500-700个缓冲并允许LRU队列对最大至128

      LUR_MAX_DIRTY 设置为80

      LUR_MIN_dirty 设置为70 ??

      RA_PAGES 设置为128,

      RA_THRESHOLD 设置为120

      DBSPACETEMP 设置多个大小相同的临时数据空间分布在不同的设备上

      DS_TOTAL_MEMORY 90%*SHMVIRTSIZE

      DS_MAX_SCANS 待建索引表的最大分片数

      下面是对环境变量的简单回顾:

      PSORT_NPROCS 设置为CPU数目,最大至10

      PDQPRIORITY 设置为100

      数据聚集

      如果经常根据索引从表中读取大量的数据,那么最好对这些数据建立聚集。通过建立聚集可以减少读取页的数量,缩短检索时间,并可以充分利用预读功能顺序扫描数据。

      数据的聚集通过创建聚集索引(clustered index)完成。利用ALTER INDEX ...TO CLUSTER 语句可以将原有索引改为聚集索引,原有索引中的数据记录顺序将作重排。如果直接创建聚集索引,系统也会将数据记录排序。请注意,在ATLTER INDEX ...TO CLUSTER 和CREATE CLUSTER INDEX 语句执行后,系统将建立新表并删除旧表。所以必须有足够的空间来容纳新旧两张表。

      如果可能,在载入数据前先对其按索引顺序排序,这样建立索引时不必设置CLUSTER子句,从而不必对数据进行聚集操作,避免建新表删旧表过程的开销。

    展开全文
  • 如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的...

    一.索引是什么?

    索引是数据库中用来提高查询效率的技术,类似于目录。如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的数据很少,使用索引反而会降低查询效率。并且索引会占用磁盘空间,一般只针对查询时常用的字段创建索引。索引分为聚集索引和非聚集索引,通过主键创建的索引称为聚集索引,聚集索引中保存数据,只要给表添加主键约束,则会自动创建聚集索引;通过非主键字段创建的索引称为非聚集索引,非聚集索引中没有数据。还可以通过多个字段来创建复合索引。

    二.MySQL中存储索引用的是什么结构?

    MySQL中存储索引用的一般都是B+树。它的数据都存放在叶子节点中,同时叶子节点之间还添加了指针形成了链表。有点像HashMap的底层实现,数组 + 链表的结构。
    在这里插入图片描述
    上图是一个4路B+树,可以清楚的看到,所有的数据都存放在叶子节点上,并且叶子节点之间有指针链表相连。

    三.为什么要用B+树?

    首先,B+树是平衡树。树的查询效率是log(n),n为树的高度。如果使用非平衡树,如二叉树。那么在特殊情况,如插入的数据是有序的,会出现什么情况呢?
    在这里插入图片描述
    二叉树发生了退化,变成了链表,树的高度变高了,影响了查询的效率。由于B+树是平衡树,保证了树的高度是最优的,所以不会出现上述的退化情况。上文展示了一个4路的B+树,可以看出当路数越多时,树的高度是越低的,那么问题来了,为什么不设计一个无限多路的B树来降低树高度,从而提升查询效率呢?先来看看一个无限多路的B树是什么样的。
    在这里插入图片描述
    不限路数,B树就退化成了一个数组。那么会出现什么问题呢?数据库的索引是存储在硬盘上的,如果数据量大的话,不一定可以一次性加载到内存中。这时候,多路存储的好处就体现出来了,可以每次加载树的一个节点,然后一步步往下找。比如一个三路的B树,每个节点最多有两个数,查找的时候每次载入一个节点进内存就行,就不会出现数据量过大无法加载到内存中的情况。在业务场景中查询数据时,往往是查询多条数据,比如查询最近修改过的10条数据,B+树在B树的基础上进行了优化,B+树的所有数据都在叶子结点,同时有链表结构,只需要找到首尾,就可以把所有的数据找出来了。综上述所述,MySQL中存储索引用B+树的好处主要是降低树高度提高查询效率、多路设计保证硬盘到内存的加载、叶子节点存储数据并且加了指针形成链表在范围查找时只需定位首尾就可以取出所需数据。


    为什么能够提高查询速度?

    索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
    一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

    举个例子:

    表中有一百万条数据,需要在其中寻找一条特定id的数据。如果顺序查找,平均需要查找50万条数据。而用二分法,至多不超过20次就能找到。二者的效率差了2.5万倍!

    在一个或者一些字段需要频繁用作查询条件,并且表数据较多的时候,创建索引会明显提高查询速度,因为可由全表扫描改成索引扫描。

    (无索引时全表扫描也就是要逐条扫描全部记录,直到找完符合条件的,索引扫描可以直接定位)

    不管数据表有无索引,首先在SGA的数据缓冲区中查找所需要的数据,如果数据缓冲区中没有需要的数据时,服务器进程才去读磁盘。
    1、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。
    2、有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。

    索引有什么副作用吗?

    (1)索引是有大量数据的时候才建立的,没有大量数据反而会浪费时间,因为索引是使用二叉树建立.

    (2)当一个系统查询比较频繁,而新建,修改等操作比较少时,可以创建索引,这样查询的速度会比以前快很多,同时也带来弊端,就是新建或修改等操作时,比没有索引或没有建立覆盖索引时的要慢。

    (3)索引并不是越多越好,太多索引会占用很多的索引表空间,甚至比存储一条记录更多。
    对于需要频繁新增记录的表,最好不要创建索引,没有索引的表,执行insert、append都很快,有了索引以后,会多一个维护索引的操作,一些大表可能导致insert 速度非常慢

    展开全文
  • MySQL的索引是如何提高查询效率的?

    千次阅读 2019-04-14 16:05:41
    MySQL的索引是如何提高查询效率的?一.索引是什么?二.MySQL中存储索引用的是什么结构?三.为什么要用B+树? 一.索引是什么? 索引是数据库中用来提高查询效率的技术,类似于目录。如果不使用索引,数据会零散的保存...

    一.索引是什么?

    索引是数据库中用来提高查询效率的技术,类似于目录。如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的数据很少,使用索引反而会降低查询效率。并且索引会占用磁盘空间,一般只针对查询时常用的字段创建索引。索引分为聚集索引和非聚集索引,通过主键创建的索引称为聚集索引,聚集索引中保存数据,只要给表添加主键约束,则会自动创建聚集索引;通过非主键字段创建的索引称为非聚集索引,非聚集索引中没有数据。还可以通过多个字段来创建复合索引。

    二.MySQL中存储索引用的是什么结构?

    MySQL中存储索引用的一般都是B+树。它的数据都存放在叶子节点中,同时叶子节点之间还添加了指针形成了链表。有点像HashMap的底层实现,数组 + 链表的结构。
    4路B+树
    上图是一个4路B+树,可以清楚的看到,所有的数据都存放在叶子节点上,并且叶子节点之间有指针链表相连。

    三.为什么要用B+树?

    首先,B+树是平衡树。树的查询效率是log(n),n为树的高度。如果使用非平衡树,如二叉树。那么在特殊情况,如插入的数据是有序的,会出现什么情况呢?
    二叉树
    二叉树发生了退化,变成了链表,树的高度变高了,影响了查询的效率。由于B+树是平衡树,保证了树的高度是最优的,所以不会出现上述的退化情况。上文展示了一个4路的B+树,可以看出当路数越多时,树的高度是越低的,那么问题来了,为什么不设计一个无限多路的B树来降低树高度,从而提升查询效率呢?先来看看一个无限多路的B树是什么样的。
    无限多路的B树
    不限路数,B树就退化成了一个数组。那么会出现什么问题呢?数据库的索引是存储在硬盘上的,如果数据量大的话,不一定可以一次性加载到内存中。这时候,多路存储的好处就体现出来了,可以每次加载树的一个节点,然后一步步往下找。比如一个三路的B树,每个节点最多有两个数,查找的时候每次载入一个节点进内存就行,就不会出现数据量过大无法加载到内存中的情况。在业务场景中查询数据时,往往是查询多条数据,比如查询最近修改过的10条数据,B+树在B树的基础上进行了优化,B+树的所有数据都在叶子结点,同时有链表结构,只需要找到首尾,就可以把所有的数据找出来了。综上述所述,MySQL中存储索引用B+树的好处主要是降低树高度提高查询效率、多路设计保证硬盘到内存的加载、叶子节点存储数据并且加了指针形成链表在范围查找时只需定位首尾就可以取出所需数据。

    展开全文
  • 众所周知,建立索引可以提高查询效率,当对FeatureClass中的某一列频繁的查找,且数据量比较大时,建立索引是非常有必要的。  这里介绍一下,用 ArcGIS Engine 来建立一个属性索引。  IIndex pIndex = new ...
  • 为何索引提高效率

    万次阅读 2020-10-15 21:54:11
    数据索引的存储是有序的 在有序的情况下,通过索引查询一个数据是无需遍历索引记录的 极端情况下,数据索引查询效率为二分法查询效率,趋近于 log2(N)
  • B-tree 索引提高 MySQL 查询效率的原理

    千次阅读 2017-01-09 09:20:21
    大家都知道,建立索引的目的便是优化慢查询,那么慢查询究竟慢在哪里呢? 查询时间 一个sql查询的时间分为 等待时间 和执行时间。 等待时间,即sql执行之前所等待的时间。对于mysql数据库来说,在执行某些操作时...
  • sql中索引优化查询效率的总结

    千次阅读 2017-07-24 16:43:17
    mysql使用索引优化查询效率
  • 利用索引优化查询提高效率

    千次阅读 2016-04-23 22:03:56
    1、索引使用原则1、在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。2、在频繁进行排序或分组(即进行group by或order by...如果建立索引不但不会提高查询效率,反而会
  • 【数据库】索引——快速提高查询效率

    千次阅读 热门讨论 2016-07-09 11:46:47
     使用索引,可以大大的提高系统的性能,在sql语句或者是存储过程的操作中,可以快速定位在执行的表关系中,避免全表扫描,增加效率。  一般我们创建索引,都会在主键、外键、或者是比较常用在sql语句或者是存储...
  • 一,创建分区 DROP TABLE IF EXISTS `test`; CREATE TABLE test ( id int(10) unsigned NOT NULL ... 1:test代表索引建立的表 test_index 代表索引名称 id代表索引绑定的列 2:show index from test 查看test表的索引
  • MySQL索引是如何提高查询效率的呢?

    千次阅读 2020-03-25 12:59:10
    覆盖索引 如果索引包含满足查询的所有数据,就被称为覆盖索引(Covering Indexes),覆盖索引非常强大,可以大大提高查询性能。 覆盖索引高性能的原因是: 索引通常比记录要小,覆盖索引查询只需要读索引,而不需要读...
  • 要说明这个原理,首先要知道局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。程序运行期间所需要的数据通常比较集中。 有了局部性原理,操作系统磁盘的...B-Tree作为索引(mysql在实现上实际是B+-
  • 索引是数据库优化所必需的工具,在面试的时候一般不会问概念性的问题,会问什么问题又如何回答呢?如果我们需要招个Java方面的高级程序员,一方面看年限(本科3年),具体到数据库方面的技能要求,包括如下三个方面...
  • 索引只是提高效率的一个因素,因此在建立索引的时候应该遵循以下原则: 在经常需要搜索的列上建立索引,可以加快搜索的速度。 在作为主键的列上创建索引,强制该列的唯一性,并组织表中数据的排列结构。 在经常使用...
  • sql加索引和删除索引提高效率

    万次阅读 2015-12-05 16:43:08
    sql加索引和删除索引,提交高效率
  • 之前写过一篇文章《oracle强制走索引,提高sql查询效率》:https://blog.csdn.net/weixin_41287692/article/details/79350991 由于现在使用 mysql 多一些,所以搜索了一下 mysql 是否也有类似的强制使用索引 二、...
  • 利用SQL索引提高查询速度

    千次阅读 2018-11-20 17:17:28
    索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。 索引的使用要恰到好处,其使用原则如下: 在经常进行连接,但是没有指定为外键的列...
  • 查询优化的统计信息是一些对象,这些对象包含与值在表或索引视图的一列或多列中的分布有关的统计信息。查询优化器使用这些统计信息来估计查询结果中的基数或行数。通过这些基数估计,查询优化器可以创建高质量的查询...
  • 使用Oracle的instr函数与索引配合提高模糊查询效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式: 1.select * from tb where name like '%XX%'; 2.select * from tb where ...
  • 想必大家都知道关系型数据库如MySQL通过索引可以提升查询效率,但是这背后的原理到底是什么呢,让我们一起来分析吧~ 如果没有索引,数据库引擎需要通过全表扫描来查找数据,这会产生大量的磁盘IO。 关系型数据库...
  • 会发现随着表中记录的增多,查询的速度也会也来越慢,特别是那种日志记录,少则几十万,多则上百万,甚至上千万数据,如果查询一次耗时太长,会严重影响业务逻辑,这时候可以考虑给经常作为条件的字段添加索引了...
  • 在 PostgreSQL 数据库中,部分索引(partial index)是指对表中满足特定条件的数据行进行索引。由于它不需要对全部数据进行索引,因此索引会更小,在特定场景下通过部分索引查找数据时性能会更好。 另外,部分索引还...
  • 如何使用索引提高查询速度

    万次阅读 2013-11-05 19:20:24
    使用索引提高查询速度 1.前言 在web开发中,页面模板,业务逻辑(包括缓存、连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈。本文主要针对MySql数据库,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 285,219
精华内容 114,087
关键字:

索引提高查询效率