在我的传统观念中,主键一般是应该设为聚集索引的,但现在有了新的认识,主键主要意义在于“唯一标识记录”关于主键的设计我也不再详述,可以参照我的《数据库主键设计之思考 》,而索引主要是“提高数据库性能”,尤其是“聚集索引”。
而现在我会注重数据库索引的建立,最关键的就是聚集索引,“聚集索引”与“非聚集索引”的理解很简单:“聚集索引”就是物理上的排列方式,而“非聚集索引”是使用索引表(相当于书的目录),使用索引之所以能提高性能,也就是“避免全表扫描”。
因此一个表只能有一个“聚集索引”,因为在物理上,不可能会有“两种”物理存放方式吧。也真是如此“聚集索引”对查询性能的影响最大,所以要非常注意“聚集索引”的建立,我目前意识到、也是Freedk所推荐的“单据日期”作为聚集索引,我说的“单据日期”是指日常业务性的记录,一般都是会有一个日期字段的,而80%查询中都会用到此"日期字段",而且把它放在Where的第一个效果最佳,因为会在指定的区域内进行其他条件的查询,范围少了很多很多,性能效果提高明显。
至于其他的索引,这只要根据业务的需要,对于一些会进行查询的字段进行一定的索引,也就是尽可能的“避免全表扫描”就可以提高系统性能。当然过多的索引也会引起系统负担,想想要建那么多“目录”自然会增加负担了。
还有“聚集索引”由于是物理存储的,性能上固然是提高了,但对于插入与删除,会引起数据的“移动”(在中间插入一条记录,会引起后半部分记录的后移),当然数据库有自己的存储机制,会采用“页”来进行分块存储,可以避免一定的“移动”,所以“聚集索引”最好是在“大部分”情况下可以“递增”,我们目前采用的“单据日期”也刚好是符合这个条件的。
以上纯属个人意见,参考了Freedk的文章:
SQL Server 索引结构及其使用(一)[转]
SQL Server 索引结构及其使用(二)[转]
SQL Server 索引结构及其使用(三)[转]
SQL Server 索引结构及其使用(四)[转]
欢迎大家讨论!!
0
0
[原创]多版本Java环境变量的配置
[转]Redmine 配置163邮箱
[转] --- Error: “A field or property with the name was not found on the selected data source” get only on server
服务器控件中使用<%#...>, JS和html控件中使用<%=...>
【字源大挪移—读书笔记】 第三部分:字尾
【字源大挪移—读书笔记】 第二部分:字根
使用WebClient 或者 HttpWebRequest均报:"The Remote name can't be solved"
【字源大挪移—读书笔记】 第一部分:字首
【英语魔法俱乐部——读书笔记】 3 高级句型-简化从句&倒装句(Reduced Clauses、Inverted Sentences) 【完结】
- 最新文章
-
Java时间类型转换
layer父窗口调用子窗口函数例子
好书推荐
maven引入本地包
Mybatis查询结果List集合数量正确,但全为null
神奇的 new Exception()
github树插件下载
secure CRT和MobaXterm配置端口转发
idea搭建vue工程
idea中文乱码配置
- 热门文章
-
浅析jQuery基本结构($实现原理)
[转] ESXI6.5 误将硬盘阵列卡配置为passthru直通模式后, 找不到硬盘的问题
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket+crowd+seafile (零) 修改端口的问题
[原创] debian 9.3 搭建seafile企业私有网盘
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装crowd 3.1.2
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装bitbucket 5.7.0
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(三) -- 安装confluence 6.6.1
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(二) -- 安装jira 7.5.4
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(一) -- 安装jdk(含jre)及 MySql 5.6.39
[原创]标记下Kendo使用中的问题, 持续更新中ing.....