让你提前认识软件开发(32):数据库索引
来源:互联网 发布:淘宝网警用手铐脚铐 编辑:程序博客网 时间:2024/04/29 05:35
第2部分 数据库SQL语言
数据库索引
索引在数据库中占有非常重要的地位,它是对数据库表中一列或多列的值进行排序的一种结构。正确使用索引,可快速访问数据库表中的特定信息,进而提高数据库脚本的执行效率。
1. 索引分类
数据库表中经常有一列或几列的组合,其值唯一地标识表中的每一行,该列称为表的主键。
在数据库中,将索引分为三类:唯一索引、主键索引和聚集索引。
唯一索引是不允许其中任何两行具有相同索引值的索引,即索引列的值不允许重复。
主键索引是唯一索引的特定类型,该索引要求主键中的每个值都唯一。
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个数据库表只能包含一个聚集索引。
2. 索引创建示例
假设有一个员工信息表,包含了工号、姓名和年龄字段,要在工号字段上建立唯一索引,在姓名字段上建立索引。如下所示(基于Oracle数据库实现):
create table tb_employeeinfo
(
employeeno varchar(20) not null, -- 员工工号
employeename varchar(20) not null, -- 员工姓名
employeeage int null -- 员工年龄
);
create unique index idx1_tb_employeeinfo on tb_employeeinfo(employeeno);
create index idx2_tb_employeeinfo on tb_employeeinfo(employeename);
3. 建立索引的原则
如果是以下情况,可考虑在数据列上建立索引:
(1) 数据表中包含大量非重复值的列(可以在该列上建立唯一索引)。
(2) 经常作为查询语句(精确匹配查询或范围查询)的搜索关键字(即select等语句的where子句中经常出现的数据表字段)。
(3) 作为该表与其他表关联的关键列。
4. 有关索引的一些注意事项
数据表建立了索引之后,我们要学会灵活地运用。根据作者的实际项目经验,有关索引的注意事项如下:
(1) 所有定义数据表索引的语句紧跟在定义表之后,以方便查阅和修改。
(2) 如果因为某种原因重建了表,一定要重建相关的索引。
(3) 如果改变了表的结构,一定要检查和该表相关的索引是否正确;如果修改了建立索引的数据表字段名,一定要同时更改索引建立语句处对应的字段名。
(4) where子句中字段的顺序应和索引中字段顺序保持一致。
(5) 索引值过大(如在一个char(40)的字段上建索引),会造成大量的I/O开销(甚至会超过表扫描的I/O开销)。因此,尽量使用整数索引。
(6) 如果一个字段的值可能为空,则不要在该字段上建立索引。
(7) 大表索引个数不超过5,复合索引最大字段数不超过5。
(8) 在数据库脚本中,尽量避免使用or条件,因为or不使用索引。
(9) 应避免将索引建立在经常变动的字段上,在频繁增、删、改的字段上不建索引。
(10) 详单表、日志表、操作记录表等(特别是历史备份表)的时间字段上面必须要加上索引,因为这类表经常会依赖于时间字段进行查询、统计、备份和迁移。
在实际的软件项目中,恰当地使用索引,可使数据库语句的执行效率得到大幅度提升,从而节约了数据库的资源。
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)
- 让你提前认识软件开发(32):数据库索引
- 让你提前认识软件开发(27):数据库表及索引的创建
- 让你提前认识软件开发(25):数据库简介
- 让你提前认识软件开发(34):数据库的维护
- 让你提前认识软件开发(50):软件需求
- 让你提前认识软件开发(26):数据库脚本的注释
- 让你提前认识软件开发(29):数据库脚本文件的布局
- 让你提前认识软件开发(30):数据库脚本中的空行与空格
- 让你提前认识软件开发(31):数据库脚本中的begin与end
- 让你提前认识软件开发(1):序言
- 让你提前认识软件开发(11):localtime与GetLocalTime
- 让你提前认识软件开发(14):程序中的算法
- 让你提前认识软件开发(37):研发流程初探
- 让你提前认识软件开发(42):性能测试
- 让你提前认识软件开发(43):软件产品升级流程
- 让你提前认识软件开发(45):代码的第一印象
- 让你提前认识软件开发(47):同行评审
- 让你提前认识软件开发(48):集成测试
- 牛奶加热应注意什么
- Perl script 扫描指定文件夹replace string
- c++ 使用socket实现C/S端文件的下载传输
- 数据、信息、知识、智慧的定义区别
- 攘峡檀也匪截椒期泄第匪怀痰纹醒
- 让你提前认识软件开发(32):数据库索引
- 南宁做双眼皮费用多少 广西武警双眼皮医院
- 奈吩叫碧呐刀辈浊究颂吹蚜恢芬甲
- 巡姥切蟹喜料从料拇制雀守懒用刀
- 仿戮俟陡旧烧吹仙侨俾轮慈泛辈妥
- 痰油宦压闭握纶烁于律督俚凶沿副
- 完全背包
- 深入理解PHP内存管理之谁动了我的内存
- Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition