数据库索引知识

一:数据库索引是什么?用于干嘛的?
  索引是一种数据结构,并在表的列上创建,包含一个表中列的值,并且这些值存储在一个数据结构中。(最常见的是B+Tree)。 数据库索引其实就是为了使查询数据效率快
二:数据库索引分为哪些?
  1. 聚集索引:
     主键索引(PRIMAY KEY):主键索引是一种特殊的唯一索引,将索引建在主键上, 不允许NULL值
  2. 非聚集索引:
     普通索引(INDEX):普通索引是最基本的索引,没有什么特别限制,主要是为了增加这个字段的查询效率速度
      唯一索引(UNIQUE):唯一索引是强调表中数据记录的唯一性,允许NULL值
     全文索引(FULLTEXT):全文索引对文本的内容进行分词搜索
  3. 联合索引:联合索引遵循最左侧原则
     组合索引:组合索引是多列值组成一个索引,专门用于组合搜索,效率大于索引合并。
三:有哪些情况会导致索引失效,不走索引?

  1. like%符号加上前面不走索引
  2. 用索引列进行计算
  3. 对索引列用函数
  4. 索引列用 != 判断

4:如何知道数据语句是否有使用索引?

  使用explain关键字:explain select * from table;
  主要关注type和key;
   type=ALL :表示全表扫描
   type=const :表示通过索引一次就找到了
   key=NULL :表示没有使用索引
   key=primary :表示使用了主键
   key一般=使用了主键/索引的名字

五:创建索引的原则:

  凡事都有两面,有利必有弊。建立索引也是同样的道理,我们在增加了检索速度的同时,也会损耗相当的更新性能。所以建立索引前,要慎重的讨论清楚,确实需要的时候再加。
   适合创建索引情况:
    1.经常需要搜索的列,加快查询速度;
    2.主键列上,强调唯一性;
    3.经常用在连接的列,这些列主要是一些外键,可以加快连接的速度;
    4.经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
    5.经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
    6.经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

   不适合创建索引情况:
    1.在查询中很少使用或者参考的列不应该创建索引。因为很少使用到,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
    2.只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
    3.定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
    4.当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值