AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 329912
Accepted
Bear Bile Farming is Torture
Bear Bile Farming is Torture
Asked: 2023-08-03 01:13:40 +0800 CST2023-08-03 01:13:40 +0800 CST 2023-08-03 01:13:40 +0800 CST

Como indexar quando os campos usados ​​na consulta são imprevisíveis?

  • 772

Na coleção A, cada documento contém até 100 campos. O banco de dados, mongoDB, permite apenas até 64 índices em uma única coleção.

Os índices são necessários para uma consulta nesta coleção. A etapa filtro, ou $match, desta consulta pode ser feita utilizando qualquer combinação dos 100 campos.

Mesmo que sejam criados 64 índices, ele poderá cobrir no máximo 64 campos.

Problema:

Isso significa que, se a consulta for filtrada com base em qualquer um dos 36 campos não indexados, uma varredura de coleta deverá ser feita para concluir a consulta.

Pergunta:

Existem formas alternativas de otimizar essa consulta, impedindo uma varredura de coleção em todas as combinações possíveis dessa consulta?

index
  • 2 2 respostas
  • 33 Views

2 respostas

  • Voted
  1. J.D.
    2023-08-03T03:20:22+08:002023-08-03T03:20:22+08:00

    Como indexar quando os campos usados ​​na consulta são imprevisíveis?

    Como você compra mantimentos quando a refeição que está sendo preparada é imprevisível? - Você não. Ou você gasta uma tonelada de dinheiro comprando todos os itens de mercearia de forma proativa.

    Para uma tabela fina (apenas algumas colunas), pode ser possível indexar todas as combinações realistas de campos a serem pesquisados. Mas na maioria das vezes para a maioria das tabelas não é razoavelmente possível. E quase sempre não é necessário.

    Os índices são necessários para uma consulta nesta coleção. A etapa filtro, ou $match, desta consulta pode ser feita utilizando qualquer combinação dos 100 campos.

    Este é um pedido incomum. Mesmo empresas de grande porte como o Facebook (para relacionar um exemplo com suas outras postagens) não pesquisam em tantos campos ao mesmo tempo. Quando você insere um termo de pesquisa na caixa de pesquisa, ele pesquisa apenas alguns campos fixos, como FirstName, LastName, , etc.DescriptionTagBirthdayAgeGender

    Mesmo que sejam criados 64 índices, ele poderá cobrir no máximo 64 campos.

    Não exatamente. Um único índice pode abranger várias combinações de campos ao mesmo tempo. Por exemplo, um único índice nos campos (FirstName, LastName, Tag)cobriria predicados em apenas FirstNameou em FirstNamee LastNameou FirstName, LastNamee Tag. Portanto, dependendo dos usos realistas, um índice pode abranger vários casos de uso.


    Sei que parece que você está recebendo muitas respostas redundantes que não parecem ajudá-lo em cada uma de suas perguntas recentes, mas isso ocorre porque a otimização para uma situação específica é muito específica. Infelizmente, apenas essas informações generalizadas podem ser fornecidas com os detalhes genéricos que você forneceu até agora.

    Se você quiser fornecer os casos de uso exatos que possui, incluindo qual é o sistema em que está trabalhando, quais são os objetos envolvidos, como eles são estruturados, alguns dados de exemplo e como você está tentando pesquisá-los, então talvez um conjunto mais específico de abordagens de otimização possa ser fornecido, o que provavelmente será orientado para a implementação do projeto.

    • 2
  2. Best Answer
    Wernfried Domscheit
    2023-08-04T00:57:59+08:002023-08-04T00:57:59+08:00

    Estou me repetindo: revise o design do seu banco de dados, é muito ruim - apenas acredite!

    De qualquer forma, você diz "Índices são necessários para uma consulta nesta coleção." Sim, isso é verdade, mas isso não significa que você precisa de um índice em cada campo que aparece (ou pode aparecer) no $matchpalco.

    Crie índices nos campos que são mais comumente usados ​​ou mais esperados. Se um único valor de índice retornar 100 documentos (de 10 milhões), isso ainda será muito rápido. O MongoDB pode escaneá-los em alguns milissegundos.

    Um campo com baixa cardinalidade não precisa de nenhum índice. O desempenho da consulta não mudará se você colocar um índice em tal campo ou não. Uma cardinalidade baixa típica seria, por exemplo, um gendercampo, tem apenas malee female(e talvez others). Um índice nesse campo é um desperdício de espaço em disco, mesmo que faça parte de todas as consultas. Uma combinação arbitrária de 100 campos dá uma quantidade enorme de condições possíveis, você nunca será capaz de cobrir todas elas. Concentre-se apenas no Top-5!

    • 2

relate perguntas

  • Como criar várias entradas no índice com base nos campos de uma linha?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quanto "Padding" coloco em meus índices?

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve