数据库主键的作用
来源:互联网 发布:淘宝玩具代理 编辑:程序博客网 时间:2024/05/16 01:06
数据库主键的作用
(2013-02-25 08:41:44)转载▼
标签:
数据库
主键
快速
更新
原理
分类: 数据库技术最近接到一个项目,要求对数据库的数据进行更新。
数据库的表也很简单,结构都是一个的,就是时间+值列表的形式记录测量值的。
数据更新都不是很难,经过计算即可完成。
由于表中有110万多条记录,数据量比较大,
所以数据更新效率太低,更新1440条数据所消耗的时间如下:
【建立主键前】
2013/2/25 8:31:46 Begin...
2013/2/25 8:31:57 199
2013/2/25 8:32:05 399
2013/2/25 8:32:13 599
2013/2/25 8:32:22 799
2013/2/25 8:32:30 999
2013/2/25 8:32:39 1199
2013/2/25 8:32:47 1399
2013/2/25 8:32:49 End.
这里使用的是事务分组方式进行数据更新,200条一组,更新时间花了1分钟多。
开始以为是更新方式有问题,试了多种更新方法,虽然效率有所提高,但是仍然无法接受。
仔细分析了数据库结构发现,原来数据表中没有主键。
主键的作用是:唯一性;提高检索速度;
于是建立了索引,结果同样用开始的方法,结果如下。
【建立主键后】
2013/2/25 8:35:39 Begin...
2013/2/25 8:35:39 199
2013/2/25 8:35:39 399
2013/2/25 8:35:39 599
2013/2/25 8:35:39 799
2013/2/25 8:35:39 999
2013/2/25 8:35:39 1199
2013/2/25 8:35:39 1399
2013/2/25 8:35:39 End.
只用了不到1秒就完成了!
【分析】
为什么建立主键能加快这么多呢?原因如下。
之前更新的时候,更新语句如下:
Updata 日常报表1 Set 电流 = 1.2 where 时间= '2012-5-21'
在更新的时候,会从 日常报表1 表中查询 时间 列,由于花有110万条数据,所以查询指定记录的平均次数是55万次!更新1440条数据,就要查询7.92亿次,所以计算量要1分钟左右,很正常。
在建议主键后,会对时间列进行排序,排序后,采用二分搜索法来查询,这样110万次最坏查询到的次数为Log2(1100,000)=24次,即使全按最坏情况考虑,更新1440条记录大约只需要查询3.5万次,难怪只用了不到1秒。
原因找到了,所以更加确认了索引的重要,同时也知道了索引效率的影响幅度。
另外再补充一句,如果主键已经建立,需要对别的列进行快速更新,那么可以对此列建立索引,同样可以达到快速检索的目的。
阅读全文
0 0
- 数据库主键的作用
- 数据库中主键的作用
- 数据库外键的作用,以及和主键的区别
- 数据库之SQL的主键和外键的作用
- 数据库中外键的作用以及和主键的区别
- 关于数据库主键和外键的作用与区别
- 结构化数据库中主键与外键的作用
- mysql 联合主键的作用
- 数据库主键的设计
- 数据库的主键
- 数据库主键的设计
- 关于数据库的主键。。。
- 数据库主键的设计
- 数据库主键的设计
- 数据库的复合主键
- 数据库的复合主键、多主键
- SQL的主键和外键作用
- 主键和外键的作用
- 使用layer 弹出对话框 子父页面相互参数传递 父页面获取子页面参数实例
- ASP.NET MVC配置客户端单点登录CAS
- NTC热敏电阻温度计算公式
- [转]【OpenCV入门教程之八】线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- Python 分词及词云绘图
- 数据库主键的作用
- Win10+ubuntu16.04双系统的安装步骤
- 添加数据
- 求助 升级了项目所有架包,然后报错
- Android简单而强大的骨骼动画视图
- 视频播放核心
- Activiti Modeler 5.22.0整合到Spring项目
- Idea的java反编译插件
- 最近你在为谁打call?