索引和分片有啥区别

Posted

技术标签:

【中文标题】索引和分片有啥区别【英文标题】:what is the difference in indexing and sharding索引和分片有什么区别 【发布时间】:2011-08-16 19:50:09 【问题描述】:

索引和分片有什么区别。两者的作用是什么?

【问题讨论】:

【参考方案1】:

索引是一种将列值存储在旨在快速搜索的数据结构中的方法。与全表扫描相比,这极大​​地加快了搜索速度,因为不必检查所有行。您应该考虑在 WHERE 子句中的列上设置索引。

分片是一种在不同机器之间拆分表的技术。这使得查询的并行解析成为可能。例如,可以在一台机器上搜索一半的表,而在另一台机器上搜索另一半。这在某些情况下可以通过添加更多硬件来提高性能,尤其是对于大型表。

【讨论】:

【参考方案2】:

索引是将列值存储在 B-Tree 或散列等数据结构中的过程。它使搜索或连接查询比没有索引更快,因为查找值花费的时间更少。分片是将单个表拆分到多台机器上。对于索引和搜索,都需要选择适当的键。

对于大型表,您应该同时考虑索引和分片。例如,考虑一个有 100 万行的表 X。如果您在表 X 中搜索键 K,查询处理将直接跳转到包含该键的 R 行并将 R 返回给用户。如果您在大多数情况下没有超过存储限制,则不需要对表进行分片。如果超出存储限制,则必须进行分片。对小表进行分片没有任何好处,因为它会导致额外的网络开销和聚合子查询。

【讨论】:

以上是关于索引和分片有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

elasticSearch理论篇—索引、节点、分片

TELEDB分片建议

es实战-分片分配失败解决方案

分片分区复制的区别及实现(mongodbmysql)

MySQL索引的Index method中btree和hash的区别

es指定分片以及分片副本数