免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3648 | 回复: 10
打印 上一主题 下一主题

mysql 有这样的功能不? 关于索引更新的效率提升 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-11 15:51 |只看该作者 |倒序浏览
学过数据库原理的人都知道 对经常进行查询操作的大表,对主键字段进行索引会增加查询时的性能。但是,对某个表建立索引后,相应的对这个表的更新操作速度就会降低,因为不仅要更新数据库表本身,也要更新索引。

所以我有个问题,不知道mysql 是否实现了这样的功能:

新增的数据先暂时不更新索引,放到一个临时地方。等到一定的时候再一次性更新索引。用户查询时先查询索引,如果索引里面找不到,再去查询那个临时的地方

这样子的话查询和更新两不误了。

请熟悉数据库的人回答一下是否有这样的功能,如果有的话应该怎么配置?谢谢

论坛徽章:
0
2 [报告]
发表于 2008-11-11 17:56 |只看该作者
更新索引是需要的,只是调整索引树也许不是动态的。
动态调整树的代价才巨大。

论坛徽章:
0
3 [报告]
发表于 2008-11-11 17:58 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2008-11-11 19:44 |只看该作者
建两个一样结构的表,一个有索引,一个没有索引做临时表不就好了?

论坛徽章:
0
5 [报告]
发表于 2008-11-11 23:32 |只看该作者
原帖由 wildlily980 于 2008-11-11 19:44 发表
建两个一样结构的表,一个有索引,一个没有索引做临时表不就好了?

:)
支持

论坛徽章:
0
6 [报告]
发表于 2008-11-12 03:12 |只看该作者
楼主说好像是想读写分离?

论坛徽章:
0
7 [报告]
发表于 2008-11-12 07:50 |只看该作者
这个方法可行,不过你要确定啥时候更新数据库!

论坛徽章:
0
8 [报告]
发表于 2008-11-12 10:12 |只看该作者
分两个表出来不就可以了。

论坛徽章:
0
9 [报告]
发表于 2008-11-12 10:55 |只看该作者
原帖由 yueliangdao0608 于 2008-11-12 07:50 发表
这个方法可行,不过你要确定啥时候更新数据库!


按照我当初的设想,经过各位的具体建议,我再细化一下,希望大家能够提出更详细的操作方法,谢谢:
表A和A' 结构相同,表A 主要负责做查询用,故对表A 做索引,对表A'做数据插入用,故对表A'不做索引。表A 和表A'每天进行若干次合并,合并的内容仍为表A,并重新建索引,对A'进行清空。
当用户有查询请求时,首先去查表A 中是否有对应的数据,如果有,则返回;如果没有,则查表A'
当用户有插入请求时,直接添加到表A'

所以具体的问题如下(希望得到具体的操作方法和步骤):
1 表A,A'怎么做合并操作?
2 当表A,A'合并时,此时有用户请求过来,应该怎么办?
3 大家有没有这样的实践 ?(虽然理论可行,不过因为项目紧,所以希望方法比较成熟可行)


请大家继续发表意见

论坛徽章:
0
10 [报告]
发表于 2008-11-12 11:05 |只看该作者

回复 #9 amandahuang 的帖子

我觉得你应该试试BLACKHOLE引擎!对你的这个想法很有用!


1、合并非常简单,insert ignore 就可以了。
2、此时你的A还处于TABLE LOCKING 状态。所以读必须等待,如果你要避免这种等待,把要读的数据CACHE起来。
3、我有过BLACKHOLE的应用,而且我表在有200W条记录的时候我就拆开了,这时候CACHE都不需要!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP