zoukankan      html  css  js  c++  java
  • DB2 索引(2)

    最近研究了一点DB2索引相关的东西,做一个总结:

    (1)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

    (2)在经常用连接的列(join)上建索引,这些列主要是一些外键,可以加快连接的速度;
    (3)在经常根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;这样查询可以利用索引的排序,加快排序查询时间;

    (4)在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。当增加索引时,会提高检索性能,但是会降低修改性能

    (5)当创建复合索引时,应该考虑这些规则:

     (a)在复合索引中,所有的列必须来自同一个表中,不能跨表建立复合列

     (b)在复合索引中,列的排列顺序是非常重要的,因此要认真排列列的顺序,原则上,应该首先定义最唯一的列,例如在(COL1,COL2)上的                 索 引与在(COL2,COL1)上的索引是不相同的,因为两个索引的列的顺序不同;

     (c)为了使查询优化器使用复合索引,查询语句中的WHERE子句必须参考复合索引中第一个列

     (d)当表中有多个关键列时,复合索引是非常有用的;使用复合索引可以提高查询性能,减少在一个表中所创建的索引数量。

    (6) 数据库是有缓存的,性能测试的时候,同一个SQL执行多次的话,除第一次外,后面的结果是缓存的

    (7) 关于select后面的字段是否建立索引一直有误区,这里澄清一下:

      select后面的列不用刻意建索引,如果where条件的列或join的列恰好在select后,这些列建索引,则不用回表查询

      如果select后的列不在where条件后,也不是JOIN的条件,建索引是没有用的;

      如果select后的列既有索引列也有非索引列,那么必须回表查询

    (8)区分度低的列建立索引没有用:

             比如性别;比如软删除标志deleted = 0/1

     (9) amount != 0的这种不等于是不走索引的。

    (10) 执行计划: 做SQL性能优化,第一步是看执行计划,分析SQL的瓶颈在哪,根据瓶颈进行优化。
      (11)  应尽量避免在 WHERE子句中对字段进行 NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描

  • 相关阅读:
    [Sql Server 转载]
    [C#][收集整理]
    [Sql Server][原创]
    [Sql Server][原创]
    [Sql Server][原创]
    C#代码验证sql语句是否正确(只验证不执行sql)的方法
    [Sql Server][转载] 数据库表的基本信息,你真的都了解吗?
    [Sql Server][原创] 常用 Sql 查询
    LocalProxy
    通过字符串引入模块下的属性
  • 原文地址:https://www.cnblogs.com/liufei1983/p/11211417.html
Copyright © 2011-2022 走看看