【发布时间】:2011-09-05 16:57:35
【问题描述】:
现在建议的表结构是:-
data_table
->impressions
->clicks
->ctr
或
data_table_1
->ctr
data_table_2
->impressions
->clicks
执行了哪些查询? 展示次数每秒大约有 500 次更新。每秒大约有 1 次点击更新。 ctr 每秒大约有 500 次更新。
现在我的应用程序使用 ctr 对数据进行排序。 ctr 是ctr = clicks/impressions 计算的点击率。现在我意识到,除非有点击更新,否则 ctr 不需要更新,因为文章的所有印象都在增加,这会降低相同关系中的 ctr,所以除非有点击,否则 ctr 不需要更新。
目前更新查询类似于“UPDATE data_table SET 展示次数 = 展示次数 + 1,ctr = 点击次数 / 展示次数 WHERE something = something
这意味着虽然一次更新了 2 个字段,但只执行了 1 个查询。
现在的瓶颈是这 500 次更新导致此表上的选择变慢。每秒大约有 20 次选择。所以我想把桌子分开。新的表格样式建议更新发生在单独的表格上,选择发生在单独的表格上。包含展示次数的数据表更新非常频繁,因此对其执行的展示次数进行更新确实加快了该表的性能。这意味着 data_table_2 上的选择也会更快,并且每次有人点击时都可以更新 ctr。
所以,我只是想知道是否应该使用新的表结构。你有什么建议?我的建议的利弊!
【问题讨论】:
-
为什么
ctr列甚至存在,考虑到它是从其他列派生的?为什么不能只使用视图来投影ctr? -
您为这些表使用什么数据库引擎?
标签: mysql database optimization database-performance