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 / 341598
Accepted
Just a learner
Just a learner
Asked: 2024-08-13 03:20:49 +0800 CST2024-08-13 03:20:49 +0800 CST 2024-08-13 03:20:49 +0800 CST

A inserção de novos dados em um índice columnstore clusterizado classificado no SQL Server interrompe o pedido?

  • 772

Estou trabalhando com índices columnstore clusterizados no SQL Server e tenho uma dúvida sobre como manter a ordem dos dados.

Entendo que, por padrão, os índices columnstore clusterizados não classificam os dados. Eu vi uma técnica em que as pessoas:

  • Crie um índice rowstore clusterizado para classificar os dados
  • Em seguida, use a opção DROP_EXISTING para criar um índice columnstore clusterizado. Isso resulta em um índice columnstore clusterizado com dados inicialmente classificados.

No entanto, estou preocupado com o que acontece quando novos dados são inseridos.

Minhas perguntas são:

  • A inserção de novos dados nesta tabela perturba a ordem existente?
  • Em caso afirmativo, há alguma maneira de evitar isso ou manter a ordem ao longo do tempo?

Eu apreciaria insights de qualquer pessoa que tenha experiência com esse cenário ou conhecimento sobre o funcionamento interno dos índices columnstore no SQL Server. Agradecemos antecipadamente pela sua ajuda!

sql-server
  • 1 1 respostas
  • 47 Views

1 respostas

  • Voted
  1. Best Answer
    SergeyA
    2024-08-15T06:13:35+08:002024-08-15T06:13:35+08:00

    Primeiro de tudo, você não precisa de um pedido, o que você realmente precisa é alinhar (não sobrepor) os valores mínimo e máximo para um campo na tabela para que o SQL Server possa executar a eliminação do segmento sem realmente abri-lo e a maneira de conseguir isso é classificar conteúdo do índice columnstore clusterizado.

    A inserção de novos dados nesta tabela perturba a ordem existente?

    Sim, é verdade. Existem dois modos de inserção de dados - lotes grandes em que a inserção vai diretamente para o grupo de linhas e inserção pequena (ou mesmo de linha única), para que a inserção vá para o deltastore. Assim que o deltastore atingir o limite, ele será movido para o estado fechado e o movedor de tupla o converterá em rowgroup. Este rowgroup pode ter valores mínimo e máximo não alinhados, portanto será verificado sempre. Além disso, o movedor de tuplas pode combinar grupos de linhas pequenos com um maior, modificando os valores mínimo e máximo para que esse grupo de linhas não seja eliminado.

    Não apenas insira ordem de interrupção. A atualização é implementada como delete+insert no deltastore, portanto fará o mesmo.

    Em caso afirmativo, há alguma maneira de evitar isso ou manter a ordem ao longo do tempo?

    Você não pode evitar isso, mas se você pensa em reconstruir o índice para restaurar a ordem de classificação, você está errado. https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-index-transact-sql?view=sql-server-ver16#rebuild--with--rebuild_index_option---n- --

    For columnstore indexes, the REBUILD operation:
      * Doesn't use the sort order.
    

    A única maneira de realmente classificar os dados é o truque que você descreveu.

    No SQL 2022 existe uma opção ORDER que deve ajudar o sql server a manter o pedido, não tive oportunidade de testar porém houve reclamações.

    O que mais você poderia fazer?

    Você pode dividir a tabela em partição estática e ativa e não tocar na partição estática.

    Você pode usar visualizações de particionamento para unir todas as tabelas estáticas e ativas. Usando essa abordagem, você pode misturar tabelas columnstore e rowstore, pode criar índices diferentes para tabelas ativas e somente leitura.

    Que estratégia você deve usar para manutenção?

    A Microsoft não fornece nenhuma medida de segmentos não alinhados. A única métrica que eles fornecem é a fragmentação

     100.0*(ISNULL(deleted_rows,0))/NULLIF(total_rows,0)
    

    Eu gostaria de ter 'práticas recomendadas' para reconstruir ou reorganizar o índice columnstore.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

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

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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