Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
使用5000万文档对MySQL到MongoDB数据库进行建模时出现的性能问题_Mysql_Mongodb_Mongodb Query - Fatal编程技术网

使用5000万文档对MySQL到MongoDB数据库进行建模时出现的性能问题

使用5000万文档对MySQL到MongoDB数据库进行建模时出现的性能问题,mysql,mongodb,mongodb-query,Mysql,Mongodb,Mongodb Query,我正在将一个MySQL表迁移到一个MongoDB数据库,该表还有5000万行。 基本上,我面临的问题是:这些数据将显示在HTML表中,并且每列都可以搜索和排序(每个分页限制100个文档)。我在Mongo上创建了一些测试数据库,当只对索引字段进行筛选和排序时,这些数据库运行良好。当对非索引字段进行筛选或排序时,查询运行太慢,因为mongo需要扫描整个集合 我在mysql上找到的解决这个问题的方法是做一个subselect限制过滤数据,类似这样: select con.field1, con.fi

我正在将一个
MySQL
迁移到一个MongoDB
数据库
,该表还有5000万行。

基本上,我面临的问题是:这些数据将显示在
HTML
表中,并且每列都可以搜索和排序(每个分页限制100个文档)。我在Mongo上创建了一些测试数据库,当只对
索引字段进行筛选和排序时,这些数据库运行良好。当对
非索引字段进行筛选或排序时,
查询运行太慢,因为mongo需要扫描整个集合

我在
mysql
上找到的解决这个问题的方法是做一个
subselect
限制过滤数据,类似这样:

select con.field1, con.field2
  from (select * from myTable order by id desc limit 40000) as con
 where con.field1 = '...' //another filters here
 order by con.field2 desc
 limit 100
这个解决方案在mysql上运行得非常好,但我在Mongo上没有发现任何类似的解决方案。正如我所说,当我对索引字段进行筛选/排序时,mongo querys运行得非常好,但我认为我不能对每个可搜索/可排序字段创建索引

这是一个在mongo上快速运行的查询,仅对索引字段进行过滤:

.find({
    tipo_doc: 'nfe', //indexed field
    id_empresa: 7 //indexed field
},
{
    sort: {'data_requisicao': -1}, //indexed field
    limit: 100
});
这是一个运行速度非常慢的查询:

.find({
    tipo_doc: 'nfe', //indexed field
    id_empresa: 7, //indexed field
    'transportador.xNome': 'My name' //not indexed field
},
{
    sort: {'emitente.enderEmit.UF': -1}, //not indexed field
    limit: 100
});
在这种情况下,我应该怎么做才能获得更好的性能