精华内容
下载资源
问答
  • 索引建立原则

    2014-11-05 15:06:00
    3、经常与其他表进行连接的表,在连接字段上应该建立索引;4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至...
    1、表的主键、外键必须有索引;
    2、数据量超过300的表应该有索引;
    3、经常与其他表进行连接的表,在连接字段上应该建立索引;
    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
    5、索引应该建在选择性高的字段上;
    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
    A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
    B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
    8、频繁进行数据操作的表,不要建立太多的索引;
    9、删除无用的索引,避免对执行计划造成负面影响;
    以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

    转载于:https://www.cnblogs.com/weijueye/p/4076424.html

    展开全文
  • 数据库索引建立原则

    2018-09-13 09:02:19
    索引建立原则,1.经常使用2.外键、主键3.经常分组排序的 使用索引防止索引失效 例如1.where条件后的索引列判断不能使用运算或内部函数 比如sub_string to_date这些 a+1>9  2.使用<> not in ...

    索引建立原则,1.经常使用2.外键、主键3.经常分组排序的
    使用索引防止索引失效  例如1.where条件后的索引列判断不能使用运算或内部函数    比如sub_string to_date这些 a+1>9
                              2.使用<> not in not exist != like这些运算
            1.隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误.
             由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给Oracle,这样会导致索引失效.
             错误的例子:select * from test where tu_mdn=13333333333;
             正确的例子:select * from test where tu_mdn='13333333333';
             2. 对索引列进行运算导致索引失效,我所指的对索引列进行运算包括(+,-,*,/,! 等)
             错误的例子:select * from test where id-1=9;
             正确的例子:select * from test where id=10;
             3. 使用Oracle内部函数导致索引失效.对于这样情况应当创建基于函数的索引.
             错误的例子:select * from test where round(id)=10; 说明,此时id的索引已经不起作用了
             正确的例子:首先建立函数索引,create index test_id_fbi_idx on test(round(id));然后 select * from test where round(id)=10; 这时函数索引起作用了
             4. 以下使用会使索引失效,应避免使用;
             a. 使用 <> 、not in 、not exist、!=
             b. like "%_" 百分号在前(可采用在建立索引时用reverse(columnName)这种方法处理)
             c. 单独引用复合索引里非第一位置的索引列.应总是使用索引的第一个列,如果索引是建立在多个列上, 只有在它的第一个列被where子句引用时,优化器才会选择使用该索引。
             d. 字符型字段为数字时在where条件里不添加引号.
             e. 当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
             5. 不要将空的变量值直接与比较运算符(符号)比较。
             如果变量可能为空,应使用 IS NULL 或 IS NOT NULL 进行比较,或者使用 ISNULL 函数。
             6. 不要在 SQL 代码中使用双引号。
             因为字符常量使用单引号。如果没有必要限定对象名称,可以使用(非 ANSI SQL 标准)括号将名称括起来。
             7. 将索引所在表空间和数据所在表空间分别设于不同的磁盘chunk上,有助于提高索引查询的效率。
             8. Oracle默认使用的基于代价的SQL优化器(CBO)非常依赖于统计信息,一旦统计信息不正常,会导致数据库查询时不使用索引或使用错误的索引。
             一般来说,Oracle的自动任务里面会包含更新统计信息的语句,但如果表数据发生了比较大的变化(超过20%),可以考虑立即手动更新统计信息,例如:analyze table abc compute statistics,但注意,更新   统计信息比较耗费系统资源,建议在系统空闲时执行。
             9. Oracle在进行一次查询时,一般对一个表只会使用一个索引.
             因此,有时候过多的索引可能导致Oracle使用错误的索引,降低查询效率。例如某表有索引1(Policyno)和索引2(classcode),如果查询条件为policyno = ‘xx’ and classcode = ‘xx’,则系统有可能会使用索   引2,相较于使用索引1,查询效率明显降低。
             10. 优先且尽可能使用分区索引。

    展开全文
  • 3、经常与其他表进行连接的表,在连接字段上应该建立索引4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;5、索引应该建在选择性高的字段上;6、索引应该建在小字段上,对于大的文本字段甚至超长...

    索引创建规则:

    1、表的主键、外键必须有索引;

    2、数据量超过300的表应该有索引;

    3、经常与其他表进行连接的表,在连接字段上应该建立索引

    4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    5、索引应该建在选择性高的字段上;

    6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

    A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

    B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

    C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

    D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

    E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

    8、频繁进行数据操作的表,不要建立太多的索引;

    9、删除无用的索引,避免对执行计划造成负面影响; 以上是一些普遍的建立索引时的判断依据。

    一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

    因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,

    索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,

    一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大

    展开全文
  • SQL索引建立原则和使用

    万次阅读 多人点赞 2017-12-01 18:52:21
    前言 SQL索引有两种,聚集索引和非聚集索引 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续 字典的拼音查询法就是聚集索引,字典的部首查询就是...建立索引原则: ...

    前言

    • SQL索引有两种,聚集索引和非聚集索引
    •  
    • 聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续
    •  
    • 字典的拼音查询法就是聚集索引,字典的部首查询就是一个非聚集索引.
    •  
    • 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致
    •  
    • 聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

     

    建立索引的原则:

     

    1) 定义主键的数据列一定要建立索引。

    2) 定义有外键的数据列一定要建立索引。

    3) 对于经常查询的数据列最好建立索引。

    4) 对于需要在指定范围内的快速或频繁查询的数据列;

    5) 经常用在WHERE子句中的数据列。

     

    6) 经常出现在关键字order bygroup bydistinct后面的字段,建立索引。

     

    如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致,否则索引不会被使用。

     

    7) 对于那些查询中很少涉及的列,重复值比较多的列不要建立索引。

     

    8) 对于定义为textimagebit的数据类型的列不要建立索引。

     

    9) 对于经常存取的列避免建立索引

     

    9) 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5

    索引虽说提高了访问速度,但太多索引会影响数据的更新操作。

     

    10) 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。

    对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。

    因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。

     

    索引的不足之处

     

    1. 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATEDELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
    2.  
    3. 建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
    4.  
    5. 索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

     

    使用索引时,有以下一些技巧和注意事项:

    索引不会包含有NULL值的列

    只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的

    所以我们在数据库设计时不要让字段的默认值为NULL

    使用短索引

    对列进行索引,如果可能应该指定一个前缀长度。

    例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。

    短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作

    索引列排序

    MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的

    因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    like语句操作

    一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。

    like “%aaa%” 不会使用索引,而like aaa%”可以使用索引。

    不要在列上进行运算

    select * from users where YEAR(adddate)<2007;

    将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

    select * from users where adddate<‘2007-01-01’;

    不使用NOT IN和<>操作

     

    索引的建立时机

    一般来说,在WHEREJOIN中出现的列需要建立索引,但也不完全如此,

    因为MySQL只对<,<=,=,>,>=,BETWEENIN,以及某些时候的LIKE才会使用索引。

    因为在以通配符%和_开头作查询时,MySQL不会使用索引。

    索引的使用

    建立索引 

    create [UNIQUE|FULLTEXT] index index_name on tbl_name (col_name [(length)] [ASC | DESC] , …..);

    示例:

    alter table table_name ADD INDEX [index_name] (index_col_name,...)

    CREATE INDEX paywayid_index ON pay_order_trade (paywayid)

    组合索引

    CREATE INDEX idx_example ON table1 (col1 ASC, col2 DESC, col3 ASC)

    示例:

    ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);

    最左前缀:顾名思义,就是最左优先,

    上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

    删除索引 

    DROP INDEX index_name ON tbl_name;

    alter table table_name drop index index_name;

    删除主键(索引)比较特别:

    alter table t_b drop primary key;

    查询索引(均可) 

    show index from table_name;

    show keys from table_name;

    desc table_Name;

    展开全文
  • mysql索引建立原则

    2020-06-29 23:31:37
    1、覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据 2、最左前缀:联合索引的最左 N 个字段,...
  • MySQL 索引建立原则

    2019-12-21 16:07:11
    MySQL 索引设计原则: (1)对于经常查询的字段,建议创建索引。 (2)索引不是越多越好,一个表如果有大量索引,不仅占用磁盘空间,而且会影响INSERT,DELETE,UPDATE等语句的性能。 (3)避免对经常更新的表进行...
  • MySQL索引建立原则

    2020-06-09 00:55:00
    前言 索引的目的是提升查询数据的效率,所以我们建索引的标准应该一切从提升查询效率为基准。 小技巧 对于有唯一值的列尽量...太长的列可以选择部分内容做索引,遵循最左前缀原则 更新频繁的列不适合建索引 ...
  • 一、索引建立的几大原则: 1)最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)...
  • Mysql---索引建立原则

    千次阅读 2018-09-07 11:30:49
    1. 索引建立原则 用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是很好的备选列 SELECT col_a &...
  • 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是唯一咧可以考虑作为索隐列 经常作为查询条件的列作为索引会提高速度 3.位经常需要进行排序.分组和...
  • 1、始终包含聚集索引 当表中不包含聚集索引时,表中的数据是无序的,这会降低数据检索效率。即使通过索引缩小了数据检索的范围,但由于数据本身是无序的,当从表中提取实际数据时,会产生频繁的定位问题,这也使得...
  • 索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引; 2. 在SQL...
  • 复合索引建立原则: 列值选择性好的放在最前面 所谓列值选择性好,指的是该列中值大部分不一样,只有少部分重复,我们就称之为列值选择性好,如主键,唯一键等. 表CHANNEL_CARD中字段lan_id只有11个不同值,serv_id基本都...
  • 若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。仔细数数,其实建立索引的代价还是蛮大的。如创建索引和维护索引都需要花费时间与精力。特别是在数据库设计的时候,...
  • mysql建立多列索引有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立索引; 如果有一个 3现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-...
  • 索引建立原则

    2015-08-28 20:55:00
    数据库建立索引原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹, 但是, 却很少有人关心过采用索引所需要付出的成本。 若数据库管理 员能够对索引所需要付出的代价有一...
  • 建立索引的好处真的很多很多,但是貌似大家都忽视了。。。 <br />索引主要是针对经常用作where条件的字段去建立,这可以有效节省查询时间。 <br />如何建立索引:  就象许多的PHP开发者一样,...
  • 数据库建立索引原则 建立索引原则: 定义主键的数据列一定要建立索引。 定义有外键的数据列一定要建立索引。 对于经常查询的数据列最好建立索引。 对于需要在指定范围内的快速或频繁查询的数据列; 经常用在...
  • 索引建立原则

    2017-09-29 21:14:00
    ,所以在建立索引的时候我们要有一些原则。 一、查询中很少涉及到的列或者重复值较多的列不建立索引。因为并不会增加查询速度,然后还有索引的缺点。 二、对于按范围查找的字段,最好建立索引(b+树索引)。利用...
  • 为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。2.为经常需要排序、分组和联合操作的字段建立索引经常需要ORDER BY、GROUP BY、DISTINCT和UNION等...
  • 建立索引原则

    千次阅读 2012-07-10 12:51:47
    索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器的字段上建立索引; 2. ...
  • 建立索引原则总结

    2021-02-13 21:11:58
    数据库建立索引原则 1,确定针对该表的操作是大量的查询操作还是大量的增删改操作。 2,尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。 3,尝试建立复合索引来...
  • 索引建立原则 1、建立数据库具体的表时,一定要先建好主键(索引),没有主键的表就是一张废表,垃圾。。。 2、数据入库,最好将数据按索引排好序后入库,即数据存储是按索引有序的存储;如果表数据量大一定记得...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,022
精华内容 808
关键字:

索引建立原则