zoukankan      html  css  js  c++  java
  • 主键索引与唯一索引的区别、索引失效的几种情况

    一、主键索引和唯一索引的区别

    (1)主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。

    (2)主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。

    (3)唯一性索引列允许空值,而主键列不允许为空值。

    (4)主键可以被其他表引用为外键,而唯一索引不能。

    (5)一个表最多只能创建一个主键,但可以创建多个唯一索引。

    (6)主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。

    (7)在RBO模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。

    约束主要有:主键约束、外键约束、非空约束、检查约束(bentwen and ,大于、小于、等于、不等于)、唯一约束。

    二、索引失效的几种情况

    1、索引并不总是都会生效的,比如以下几种情况,将导致索引失效,从而走全表扫描:

    (1)如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),如果要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

    (2)对于复合索引,如果不使用前列,后续列也将无法使用索引,复合索引需要满足最左匹配原则;

    (3)模糊查询like以%开头;

    (4)索引列的数据存在数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引;

    (5)where子句里对索引列上有数学运算,用不上索引;

    (6)where 子句里对有索引列使用函数,用不上索引;

    (7)如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

    2、什么情况下不推荐使用索引

    (1)数据唯一性差(一个字段的取值只有几种时,例如性别字段)的字段不要使用索引;

    (2)频繁更新的字段不要使用索引;

    (3)字段不在where语句出现时不要添加索引,如果where后含IS NULL 、IS NOT NULL、 like ‘%输入符%’等条件,不建议使用索引;

    (4)where 子句里对索引列使用不等于(<>),使用索引效果一般。


    参考博文:
    (1)https://www.cnblogs.com/-619569179/p/6528896.html
    (2)https://www.cnblogs.com/liehen2046/p/11052666.html
    (3)https://blog.csdn.net/guoxingege/article/details/51034387

  • 相关阅读:
    jQuery动态加载动画spin.js
    jQuery自动过滤单词插件
    基于jQuery的自定义滚动条
    jQuery纵向分类下拉菜单导航
    仿酷狗官网新闻焦点图插件
    metro扁平UI网页组件
    HTML5环形音乐播放器
    纯CSS3个性化圆形按钮登录表单
    纯CSS3绘制的黑色图标按钮组合
    纯CSS3实现iOS7扁平化图标
  • 原文地址:https://www.cnblogs.com/jasonboren/p/14863812.html
Copyright © 2011-2022 走看看