什么时候使用一个索引
cassandra的内建索引适合这样一个表,它有好多列都包含这个索引列的值。这个索引列有更多的值,你的开销越大,主要是对查询和维护索引。例如假设你有一个播放列表的表里面有数十亿首歌曲。很多歌曲可能有共同的艺术家。这个艺术家的列就比较适合作为索引。
什么情况不适合使用索引
不要在以下情况使用索引:
- 这列的值很多的情况下,因为你相当于查询了一个很多条记录,得到一个很小的结果。
- 表中有couter类型的列
- 频繁更新和删除的列
- 在一个很大的分区中去查询一条记录的时候(也就是不指定分区主键的查询)
值很多的列建索引的坏处
如果你在一个有很多值的列上创建了索引,在这个索引的上的查询就会导致多次查询,而最终查到很少的结果。在一个有数十亿首歌曲的表里通过作者(通常每首歌都不一样)去搜索,相比通过艺术家去搜索,是很低效的。更有效的方式是手动维护一个索引表,而不是使用cassandra的内建索引。对于一些特定值的列,使用索引有时候是很方便的,只要不是大量的查询,并且不是持续负载的情况下。
相反只有几个很少值的列也不适合创建索引,例如boolean型的列,这是没有意义的。索引列的每一个值在索引中都是一行。也就是说对于false的值,会形成一个超级大的行。也就是说索引一个值只有foo=false 和foo=true的列是没有意义的。
频繁更新和删除的列建索引的坏处
Cassandra stores tombstones in the index until the tombstone limit reaches 100K cells. After exceeding the tombstone limit, the query that uses the indexed value will fail.
在一个很大的分区中去查询一条记录的坏处
不指定分区key,在一个索引列上查询,相当于在集群中所有的机器上去查询,这种查询会变慢随着机器的增加。你要在你查询中指定分区key,避免这种查询性能问题。
除非注明,赵岩的博客文章均为原创,转载请以链接形式标明本文地址
本文地址:https://zhaoyanblog.com/archives/524.html