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 / 312570
Accepted
User1974
User1974
Asked: 2022-05-26 07:21:05 +0800 CST2022-05-26 07:21:05 +0800 CST 2022-05-26 07:21:05 +0800 CST

Caso de uso pretendido para colunas virtuais com índice baseado em função?

  • 772

Qual é o caso de uso pretendido para colunas virtuais com um índice baseado em função?


A razão pela qual eu pergunto (novato):

Eu tenho explorado opções para pré-computar colunas em uma tabela. Por exemplo, em uma tabela de estradas, preencha um campo usando o número da zona de interseção espacial de uma tabela de zonas. Mais informações aqui: Opções para campos de computação.

Minha experiência é que as consultas espaciais geralmente são lentas — seja usando o tipo de dados/funções SDO_GEOMETRY da Oracle ou usando um tipo de objeto definido pelo usuário, como o tipo de dados/funções ST_GEOMETRY da Esri. Então, eu definitivamente quero pré-computar esse cálculo — para evitar fazer cálculos caros constantemente toda vez que a consulta for usada.

No início, fiquei tentado a criar uma coluna virtual com um índice baseado em função. Mas agora (com a entrada de outros), estou começando a me perguntar se pré-computar uma coluna usando um índice baseado em função pode não ser o uso correto para FBIs. Em vez disso, estou querendo saber se simplesmente calcular um campo na tabela usando um gatilho pode ser uma opção melhor. (Estou ciente de que as visualizações materializadas também são uma opção. Mas não tenho privilégios CREATE MATERIALIZED VIEW.)


Então, para encurtar a história, suspeito que uma coluna virtual e um FBI não sejam apropriados para o meu caso de uso. Com isso dito, qual é o caso de uso certo para uma coluna virtual e um FBI?

oracle index
  • 1 1 respostas
  • 80 Views

1 respostas

  • Voted
  1. Best Answer
    Andrew Sayer
    2022-05-26T08:50:29+08:002022-05-26T08:50:29+08:00

    As colunas virtuais não pré-computam nada por conta própria, você está apenas armazenando a expressão nos metadados. Se você planeja ter filtros para essas expressões, talvez queira uma coluna virtual por alguns motivos - você não precisa escrever a expressão inteira toda vez, o Oracle reunirá estatísticas sobre a coluna para você obter planos melhores ( se suas consultas forem complicadas o suficiente para que essa cardinalidade importe).

    Um índice (baseado em função) na coluna virtual torna a filtragem da expressão ainda mais rápida, pois a expressão agora está indexada para que você possa fazer pesquisas rápidas (é um índice). Você não precisa criar a coluna virtual também - você pode apenas criar o índice baseado em função contra a expressão, mas isso significa que você tem que digitar toda a expressão novamente a cada vez (Oracle é bastante tolerante com a forma como você digita ). Você ainda obtém os benefícios das estatísticas, pois o índice terá estatísticas e, em segundo plano, haverá uma coluna invisível que pode ter estatísticas contra ele (embora eu acredite que o padrão é que isso não aconteça).

    Se você estiver fazendo isso, tome cuidado para que sua expressão seja determinística, o resultado deve mudar apenas com base na linha. Isso também inclui coisas como parâmetros NLS que podem fornecer resultados diferentes. Houve uma correção de bug algumas versões atrás em que o Oracle desativou a indexação em expressões regex porque elas podem depender das configurações de idioma; se você forçar isso, poderá acabar com dados corrompidos.

    Os gatilhos podem funcionar, mas perdi a conta do número de vezes que vi uma suposição sendo feita em um gatilho que acabou causando corrupção. As visualizações materializadas podem permitir que você tenha expressões ainda mais complexas sendo indexadas, mas você precisa armazenar todo o conjunto de resultados e os índices adicionais novamente. Você também precisará certificar-se de que pode atualizar a visualização materializada adequadamente, atualizações rápidas ficam mais difíceis à medida que você adiciona complexidade.

    • 1

relate perguntas

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

  • 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