Database 与数据库索引的写入相比的读取数
众所周知,只有当您有大表且读多于写时,数据库索引才有意义,因为索引的创建会导致额外的写入开销,因为数据库中的每次修改也会导致索引的修改 如果我们假设数据库的索引结构是 a) B+树 b) 哈希表 与开始实施数据库索引的写入次数相比,读取次数的经验法则是什么Database 与数据库索引的写入相比的读取数,database,indexing,Database,Indexing,众所周知,只有当您有大表且读多于写时,数据库索引才有意义,因为索引的创建会导致额外的写入开销,因为数据库中的每次修改也会导致索引的修改 如果我们假设数据库的索引结构是 a) B+树 b) 哈希表 与开始实施数据库索引的写入次数相比,读取次数的经验法则是什么 有关数据库索引工作原理的信息,请查看使用数据库的目的通常是减少在数据中查找内容的时间,因此它是关于“读取”。我非常肯定,90%的人使用数据库进行“阅读”,如果不是100%的话 让我们考虑几个案例: 只写不读:有什么意义?只是为了备份?那么
有关数据库索引工作原理的信息,请查看使用数据库的目的通常是减少在数据中查找内容的时间,因此它是关于“读取”。我非常肯定,90%的人使用数据库进行“阅读”,如果不是100%的话 让我们考虑几个案例:
- 只写不读:有什么意义?只是为了备份?那么 备份将在还原时用于读取
- 写得多,读得少:我想不出这种情况,但当你遇到这种情况时,你更看重哪一种?快速呈现数据?或者您保存数据的速度有多快?如果您重视数据保存的速度,那么您可以删除索引并进行夜间运行来显示数据(考虑到数据保存的速度,我确信它足够大,需要夜间运行来汇总数据),因此您有一个近乎实时的写入和H+1或更多的延迟数据读取,这就引出了一个问题:拥有这样的配置有什么意义李>
- 少写多读:这是最常见的情况
- 不写,只读:100%你不能产生这种情况,不写,那么读什么
对不起,我的英语不好,希望对你有帮助。使用数据库的目的通常是为了减少在数据中查找内容的时间,因此它是关于“阅读”的。我非常肯定,90%的人使用数据库进行“阅读”,如果不是100%的话 让我们考虑几个案例:
- 只写不读:有什么意义?只是为了备份?那么 备份将在还原时用于读取
- 写得多,读得少:我想不出这种情况,但当你遇到这种情况时,你更看重哪一种?快速呈现数据?或者您保存数据的速度有多快?如果您重视数据保存的速度,那么您可以删除索引并进行夜间运行来显示数据(考虑到数据保存的速度,我确信它足够大,需要夜间运行来汇总数据),因此您有一个近乎实时的写入和H+1或更多的延迟数据读取,这就引出了一个问题:拥有这样的配置有什么意义李>
- 少写多读:这是最常见的情况
- 不写,只读:100%你不能产生这种情况,不写,那么读什么
对不起,我的英语不好,希望对你有帮助。这里有很多因素。例如,索引数据是否在缓存中?数据块是否在缓存中?查询检索了多少行?在桌子上锄许多行等 我已经被问了很多次这个问题(或它的变体)。我宁愿提供一些信息,让提出问题的人能够做出明智的决定,而不是给出数字。下面是一个“信封背面”计算示例,其中包含一些已声明的假设
- 比意味着表消耗约19GB(忽略任何压缩)
- 索引读取是零时间
- 数据块读取:25000个数据块@5ms每个数据块为125s
- 以10GB/s速度扫描的19GB为2s
这里涉及到很多因素。例如,索引数据是否在缓存中?数据块是否在缓存中?查询检索了多少行?在桌子上锄许多行等 我已经被问了很多次这个问题(或它的变体)。我宁愿提供一些信息,让提出问题的人能够做出明智的决定,而不是给出数字。下面是一个“信封背面”计算示例,其中包含一些已声明的假设
- 比意味着表消耗约19GB(忽略任何压缩)
- 索引读取是零时间
- 数据块读取:25000个数据块@5ms每个数据块为125s
- 以10GB/s速度扫描的19GB为2s
- 插入:O(1)
- 搜索O(n)