如何将写入与读取分开以最大限度地减少重读取查询的影响?

时间:2015-07-09 18:00:33

标签: sql sql-server database

我的数据库中有大量写字表。需要由其他人运行只读查询。我不知道他们的查询的复杂性和数量,但我知道他们什么时候开始这样做,写入变得超级。因此,将写入与读取分开似乎是要走的路。

复制是一个答案吗?我还能尝试什么?

2 个答案:

答案 0 :(得分:1)

与表现相关的任何事情"它取决于"。

一般来说,你是在忽略,因为一般来说隔离级别会照顾到你的那种问题。你可以点击书籍看它是如何运作的。一般来说,如果你不知道正好你正在做什么,那么干预它是不明智的。

如果您结束处理有关它的问题,您可以:

1)复制(但你需要深入研究它)。 优点是简单,不受欢迎:浪费服务器磁盘和CPU。

2)创建雄鹿表。 这是一个简单的解决方案,适合在重读表上进行大量重写时。例。您有一个Web服务,用户有时会上传大型csv文件,这些数据会持久存储在stag表中。简单的没有索引表就是原始数据的缓冲区(或队列)。后来在一个机会之窗"该数据插入实际表中。不需要查询上载数据的优点。优点是可以轻松处理不良的格式化数据,并且只有经过清理的数据才能存储在数据库中。也非常容易实现您可以在每日完整备份之后或之前创建一个SQL服务,例如。

3)通过查询微调隔离级别查询:优点是,如果你真的知道该怎么做系统生病闪耀的优点是:很难做正确的tweeks,容易让你的系统陷入困境,鬼和放大器;脏读和丢失的数据。还需要花费大量时间以正确的方式实现和维护(您必须密切关注所调查的查询)。

编辑关于 WITH(NOLOCK)评论:认真的家伙?它自SQL 2000以来已被弃用!它是懒惰的银弹,不能很好地运作。考虑这样一种情况:您进行脏读,处理一些数据并保留更多与该脏数据相关的数据。现在回滚撤消你现在有一个孤儿行或更糟糕的数据完整性地狱的脏点。除非您仍在使用SQL Server 7,否则不要再使用它了。研究isloation级别,了解NOLOCK有多糟糕和无用(过去15年!)

答案 1 :(得分:0)

对我来说,正确的答案是复制,您可以进行快照复制,在插入数据库中使用另一组索引,在读取时使用另一组索引。一个侧重于快速插入和其他快速搜索。