一、索引的本质:

数据库查询是数据库的最主要的功能之一,数据库系统的设计者从查询算法的角度对数据库进行了一定的优化。

最基本的顺序查找算法的复杂度为O(n),在数据量很大的时候算法的效率是很低的。虽然也有一些更优秀的查询算法:二分查找、二叉树查找,但这些算法都只能应用在特定的数据结构之上,如二分查找要求被检索数据本身是有序的、二叉查找则只能应用在二叉查找树上。但数据本身的组织结构不可能完全满足各种数据结构。

因此,在数据之外,数据库系统还维护这满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据。这样就可以在这些数据结构之上实现高级查找算法。这种数据结构,就是索引。


二、索引的分类

  • 普通索引:这是最基本的索引,而且没有唯一性之类的限制。普通索引可以通过以下集中方式创建:
    1. 在已经创建好的表之上添加索引:create index 索引名 on 表名(列名1,列名2,...);
    2. 修改表来添加索引:alter table 表名 add index 索引名(列名2,列名2,...);
    3. 创建表的时候指定索引:create table 表名([...],index 索引名(列名1,列名2,...);
  • 唯一索引:表示唯一,不允许有重复的索引。如果某字段信息保证不会重复用作索引时,可以设置为unique。唯一索引也有三种方式创建:
    1. 在已经创建好的表之上添加索引:create unique index 索引名 on 表名(列名1,列名2,...);
    2. 修改表来添加索引:alter table 表名 add unique 索引名(列名2,列名2,...);
    3. 创建表的时候指定索引:create table 表名([...],unique 索引名(列名1,列名2,...);
  • 主键索引:是一种唯一索引,同时它必须指定为"primary key":
    1. 主键一般在创建表的时候指定:create table 表名([...],primary key (列名));
    2. 修改表的时候加入主键也是可以的: alter table 表名 add primary key(列名);

三、索引选择原则

  1. 比较频繁的作为查询条件的字段应该创建索引
  2. 唯一性太差的字段不适合单独创
    建索引,即使频繁作为查询条件
  3. 更新非常频繁的字段不适合创建索引
  4. 不会出现在WHERE子句中的字段不该创建索引

四、索引的弊端

       索引能极大提高数据检索的效率,但有一个不能忽略的问题是,索引是完全独立于基础数据之外的一部分数据——也就是索引要占据额外的存储空间。
       另外,数据库还要腾出部分开销用于维护索引。索引虽然能增加查询的效率,但是降低了其他操作的效率。数据表有变化影响到索引时,数据库也必须随时调整索引。

最新文章

  1. 【那些年关于MyEclipse的快捷键大全】
  2. TCP首部解析
  3. 【Spring】Spring AOP实现原理
  4. 一行代码远离Google浏览器兼容问题的困扰
  5. C#发送邮件源码
  6. Struts2 入门(新手必看)
  7. javascript:运动框架
  8. python 面试相关
  9. [Bullet3]创建世界(场景)及常见函数
  10. CSS表单属性
  11. Java发送新浪微博的问题
  12. 201521123069 《Java程序设计》 第4周学习总结
  13. mybatis的知识点
  14. 支持scrollTo的RecycleView
  15. C++11 新特性之operator "" xxx
  16. thunderbird 163 smtp
  17. Go-day01
  18. Java语法基础学习DaySeven
  19. python学习之----初见网络爬虫(输出整个网页html的代码)
  20. python3+requests:post请求四种传送正文方式(详解)

热门文章

  1. 多图预警——从 RAID 到分布式系统中的副本分布
  2. 如何在命令行添加换行符到git commit -m "xxx"
  3. Arm开发板+Qt学习之路-论can网通讯受log日志的影响
  4. 数组翻转(非reverse)
  5. html基本介绍,了解html与css,html语法和结构
  6. DEM转换为gltf
  7. [MySQL] mysql索引的长度计算和联合索引
  8. App自动化测试环境搭建
  9. 《ADCrowdNet》密集人群检测论文笔记
  10. Java数据结构--双向链表的实现