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

    2019-06-26 10:32:34
    数据库建立索引原则 1,确定针对该表的操作是大量的查询操作还是大量的增删改操作。 2,尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。 3,尝试建立复合索引来...

    数据库建立索引的原则 
    1,确定针对该表的操作是大量的查询操作还是大量的增删改操作。 

    2,尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。 

    3,尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间。 

    4,对于小型的表,建立索引可能会影响性能 

    5,应该避免对具有较少值的字段进行索引。 

    6,避免选择大型数据类型的列作为索引。 

    索引建立的原则 

    索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 

    1. 在经常用作过滤器的字段上建立索引; 

    2. 在SQL语句中经常进行GROUP BY、ORDER BY的字段上建立索引; 

    3. 在不同值较少的字段上不必要建立索引,如性别字段; 

    4. 对于经常存取的列避免建立索引; 

    5. 用于联接的列(主健/外健)上建立索引; 

    6. 在经常存取的多个列上建立复合索引,但要注意复合索引的建立顺序要按照使用的频度来确定; 

    7. 缺省情况下建立的是非簇集索引,但在以下情况下最好考虑簇集索引,如:含有有限数目(不是很少)唯一的列;进行大范围的查询;充分的利用索引可以减少表扫描I/0的次数,有效的避免对整表的搜索。当然合理的索引要建立在对各种查询的分析和预测中,也取决于DBA的所设计的数据库结构。 

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

    2019-12-26 14:49:37
    1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该...2.为经常需要排序、分组和联合操作的字段建立索引 经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为...

    1.选择唯一性索引

    唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。

    2.为经常需要排序、分组和联合操作的字段建立索引

    经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。

    3.为常作为查询条件的字段建立索引

    如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。

    4.限制索引的数目

    索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。

    5.尽量使用数据量少的索引

    如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。

    6.尽量使用前缀来索引

    如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

    7.删除不再使用或者很少使用的索引

    表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。

    8 . 最左前缀匹配原则,非常重要的原则。

    mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a 1=”” and=”” b=”2” c=”“> 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

    9 .=和in可以乱序。

    比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

    10 . 尽量选择区分度高的列作为索引。

    区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就 是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条 记录

    11 .索引列不能参与计算,保持列“干净”。

    比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本 太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);

    12 .尽量的扩展索引,不要新建索引。 
    比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可

    13、当单个索引字段查询数据很多,区分度都不是很大时,则需要考虑建立联合索引来提高查询效率

    注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。

     标准sql执行顺序

    展开全文
  • ---使用索引优化数据库查询效率1.不宜创建索引的情形(1)经常插入,修改和删除的表 (2)数据量比较小的表,因为查询优化器在搜索索引...聚集索引的设计原则(1)该列的数值是唯一的或者很少有重复的记录(2)经常使用bet...

    ---使用索引优化数据库查询效率
    1.不宜创建索引的情形
    (
    1)经常插入,修改和删除的表

    (2)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间

    2.适合创建索引的情形
    (
    1)为where子句中出现的列创建索引
    (
    2)创建组合索引
    (
    3)为group by 子句中出现的列创建索引

    3.聚集索引的设计原则
    (
    1)该列的数值是唯一的或者很少有重复的记录
    (
    2)经常使用between ...and..按顺序查询的列
    (
    3)定义identity的唯一列.
    (
    4)经常用于对数据进行排序的列.

    ---无法使用索引的select语句
    1.对索引列使用了函数,如:
    select * from tb where max(id)=100

    2.对索引列使用了'%xx',如:
    select * from tb where id like '%1'
    需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如
    select * from tb where id like '1%'就可以使用索引

    3.在where子句中对列进行类型转换(其实也是使用到了函数)

    4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;
    select * from tb where id='1' and col1='aa'
    select id,sum(col1) from tb group by id
    select * from tb where id='2' and col2='bb'
    则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序

    5.在where 子句中使用in关键字的某些句子
    当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引
    如:
    select
    *
    from
    ta
    where
    id
    in
    (
    select id from tb where ....)

    --这样可以用到索引
    select * from tb where id in('1','2')

     

     

    转:http://hi.csdn.net/fredrickhu

    转载于:https://www.cnblogs.com/javaTest/archive/2010/06/04/2589435.html

    展开全文
  • mysql建立多列索引有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立索引; 如果有一个 3现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-...

    现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-Tree格式索引,可以直接定位记录,无需扫描。 mysql建立多列索引有最左前缀的原则,即最左优先,如: 如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引; 如果有一个 3

    现实中,mysql可以根据业务需要建立组合索引,由于mysql使用B-Tree格式索引,可以直接定位记录,无需扫描。mysql建立多列索引有最左前缀的原则,即最左优先,如:如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;

    如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)和(col1,col2,col3)上建立了索引;

    如何建立组合索引?最频繁使用的列放在左边;

    查看列的选择性(即该列的索引值数量与记录数量的比值),比值越高,效果越好;

    例如用户表,如果按照用户姓名查询比较多,可以考虑在根据姓名建立索引。这里有两种形式:1在用户的名字字段(name)在做索引。2,在用户的名字和姓氏字段建立索引(name+family_name)。我们查看了下name字段的选择性,执行如下语句。

    SELECT count(DISTINCT(name))/count(*) AS Selectivity FROM user;

    +-------------+

    | Selectivity |+-------------+

    | 0.0052 |

    +-------------+

    发现值非常小,因为name相同的用户实在太多。 再查看下name+family_name的选择性。

    SELECT count(DISTINCT(concat(name, family_name)))/count(*) AS Selectivity FROM user;

    +-------------+

    | Selectivity |+-------------+

    |0.9563 |

    +-------------+

    发现名字完全相同的员工基本没有。但是索引key如果太长会使得索引文件变大并且维护开销增大,name+family name的长度等于30,还是希望有一个艰巨选择性和长度的方案。 因此可以考虑在name和family前自己字符上面建立索引,例如 name + left(family_name,5):

    SELECT count(DISTINCT(concat(name, left(family_name,5))))/count(*) AS Selectivity FROM user;

    +-------------+

    | Selectivity |+-------------+

    | 0.9012 |

    +-------------+

    虽然不如以name+family_name的选择性高,但是已经基本满足要求。

    展开全文
  • 若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不会那么随意到处建立索引了。仔细数数,其实建立索引的代价还是蛮大的。如创建索引和维护索引都需要花费时间与精力。特别是在数据库设计的时候,...
  • 1.选择唯一性索引唯一性索引的值是唯一的,可以更快速...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,尝试建立复合索引来...
  • Oracle建立索引原则

    千次阅读 2019-10-23 15:46:57
    1.数据库建立索引原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的。 铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。 铁律三:对于按范围查询的列,最好建立索引。 铁律四:...
  • mysql 建立索引原则

    2017-10-20 16:59:31
    mysql 建立索引原则  索引查询是数据库中重要的记录查询方法,要不要进入索引以及在那些字段上建立索引都要和实际数据库系统的查询要求结合来考虑,下面给出实际中的一些通用的原则: 1. 在经常用作过滤器...
  • 建立索引的好处真的很多很多,但是貌似大家都忽视了。。。 <br />索引主要是针对经常用作where条件的字段去建立,这可以有效节省查询时间。 <br />如何建立索引:  就象许多的PHP开发者一样,...
  • 总结了一下数据库建立索引的一些常用的规则,欢迎大佬补充. 1,选择唯一索引,可以更快速的通过该索引来确定某条记录 2,为经常要排序,分组和联合操作的字段建立索引 3,为经常作为查询条件的字段建立索引 4,限制索引的...
  • 在建立数据库表的时候,建立索引,能帮助我们提升查询速度,在MyISAM和... 在建立索引的时候,要考虑索引的最左匹配原则(在使用SQL语句时,如果where部分的条件不符合最左匹配原则,可能导致索引失效,或者不能完全
  • 1.超过300条记录,就应该建立索引 2.应该建立索引的字段:  1.主键和外键上必须有索引  2.经常与其它表连接的连接字段  3.经常进行范围查询的列  4.经常排序查询的列  5.where子句中的字段  6.group ...

空空如也

空空如也

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

建立索引原则