我正在寻找实时解决方案......
以下是我的数据库专栏。我使用的是Oracle10g。请帮我定义表类型/索引和调整PLSQL /查询(两者)以进行更新和插入
插入和更新查询很简单,但我们需要注意性能,因为我的系统每秒会执行 200次。
让我知道......我应该使用程序还是简单查询?要求使用适当的DB表类型/索引编写调优的plsql和查询。
我真的希望在每秒连续200次更新后看到我的系统的性能
数据库表(列)(如果需要,我可以更改结构,所以请让我知道......)
Play ID - ID
Type - Song or Message
Count - Summation of total play
Retries - Summation of total play, if failed.
Duration - Total Duration
Last Updated - Late Updated Date Time
提前致谢...如有任何疑惑,请告诉我......
答案 0 :(得分:1)
你并没有真正详细说明你要更新的内容等等。
作为编写更新语句的基础,不要使用PL / SQL,除非您无法在SQL中实现您想要的功能,因为在您处理任何记录之前单独进行上下文切换会损害您的性能
如果您能够专门为更新创建索引,则索引将出现在更新语句的WHERE
子句中的列,以便在更新之前快速找到记录。
至于插入,请查看/*+ append */
提示插入记录的好处,看看它是否会对您的特定情况有所帮助。
最后,您将使用的表格结构将取决于您尚未开始使用您提供的详细信息的因素,我建议您对数据库结构进行一些研究或向您的DBA询问101课。
祝您好运......
编辑:
回应:
Play ID - ID ( here id would be song name like abc.wav something..so may be VARCHAR2, yet not decided..whats your openion...is that fine if primary key is of type VARCHAR2....any suggesstions are most welcome...... ) Type - Song or Message ( varchar2) Count - Summation of total play ( Integer) Retries - Summation of total play, if failed. ( Integer) Duration - Total Duration ( Integer) Last Updated - Late Updated Date Time ( DateTime )
将PRIMARY KEY作为VARCHAR2数据类型没有任何问题(尽管经常有关于具有非特异性PK的值的争论,即序列)。但是,你必须确保你的PK是独一无二的,如果你不能保证这一点,那么在你必须引入另一个列以保持唯一性时,你的PK值得一个序列是值得的。
至于将您的表列声明为INTEGER,它们最终将被解析为NUMBER,因此我只是将表列创建为数字(除非您有非常具体的原因将它们创建为INTEGER)。
最后,在DATETIME列中,您只需要将其视为DATE数据类型,除非您的时间部分需要真正的精度,在这种情况下将其声明为TIMESTAMP数据类型。
至于帮助您了解表本身的结构(即您想要哪些列等),那么我不能帮助您,因为我对您的报告要求,应用要求或审计要求一无所知,公司最佳练习,命名惯例等。我担心这是你自己决定的事情。
为了提高性能,请将索引保留为最小值(即只有索引列有助于UPDATE WHERE子句搜索),只更新可能的最小数据,并按照之前的建议研究APPEND提示,以便在您的案件,但你必须自己测试。