Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance MongoDB中的复合索引是否改善了多文件匹配(而不是排序)?_Performance_Mongodb_Sorting_Indexing_Compound Index - Fatal编程技术网

Performance MongoDB中的复合索引是否改善了多文件匹配(而不是排序)?

Performance MongoDB中的复合索引是否改善了多文件匹配(而不是排序)?,performance,mongodb,sorting,indexing,compound-index,Performance,Mongodb,Sorting,Indexing,Compound Index,文件似乎有点不清楚 1) 它清楚地表明,复合索引确实提高了多字段排序的性能(顺序和方向依赖) 2) 有一个短语让我认为它将提高多字段马赫数(sql类比:其中a=1和b=2,c是的,创建复合索引可以提高查询性能 如果所有查询使用相同的单键,则创建单键索引 如果对于特定集合,您使用单个键进行匹配,如,其中a=1 创建复合索引以支持多个不同的查询 如果查询使用一个或多个键,最好使用复合索引 db.sample.createIndex( { "a": 1, "b": 1, "c":1 } ) 您可以只

文件似乎有点不清楚

1) 它清楚地表明,复合索引确实提高了多字段排序的性能(顺序和方向依赖)


2) 有一个短语让我认为它将提高多字段马赫数(sql类比:其中a=1和b=2,c是的,创建复合索引可以提高查询性能

如果所有查询使用相同的单键,则创建单键索引

如果对于特定集合,您使用单个键进行匹配,如
,其中a=1

创建复合索引以支持多个不同的查询

如果查询使用一个或多个键,最好使用复合索引

db.sample.createIndex( { "a": 1, "b": 1, "c":1 } )
您可以只查询a,可以查询a与b的组合,也可以查询a、b和c。您可以使用explain()方法了解您的查询使用的是什么计划


还可以优化查询的性能。它可以支持复合索引无法支持的内容。

好的,我做了一些解释()发现它确实更喜欢无排序查询中的复合索引,而不是单字段索引。简单地说,在查询实际集合之前,它能匹配的越多越好。当然,hat也有例外,但它们通常应用于跨数据库,即SQL和MongoDB中。“它可以支持复合索引无法支持的内容。”索引交叉实际上不支持比复合索引少的索引,例如匹配和排序,而且它实际上不是比专门设计的索引慢很多吗?@Sammaye你是对的,当匹配键与排序键不同时,索引交叉不起作用。因为列表顺序和排序顺序都很重要在复合索引中,复合索引可能不支持不包含索引前缀键或指定不同排序顺序的查询条件,但在这种情况下,索引交集工作得很好。嗯……你知道,要让基本搜索正常工作,在这些细节中不是太麻烦了吗?我开始考虑不使用mongo任何类型的搜索,并将此功能移动到运行Sphinx的专用主机上。我真的希望如此(根据我的经验,这不是很大)我可以在不涉及如此复杂细节的情况下获得良好的安静性能。你怎么说?@user1312695这很复杂?这是每个db用户都应该知道的标准内容,即使在Sphinx中也是如此。如果你不了解存储的全部性质,你就无法进行有效的查询tech@user1312695因为a.b是的前缀a、 b,c,d a,b,c,d的单一复合指数就足够了