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 / 8496
Accepted
Matthew
Matthew
Asked: 2011-11-29 11:36:53 +0800 CST2011-11-29 11:36:53 +0800 CST 2011-11-29 11:36:53 +0800 CST

O conceito de um índice clusterizado em um design de banco de dados faz sentido ao usar SSDs?

  • 772

Ao projetar um esquema de dados do servidor SQL e as consultas subsequentes, sprocs, exibições, etc., a noção de um índice clusterizado e a ordem dos dados no disco faz algum sentido a considerar para projetos de banco de dados feitos explicitamente para serem implantados em plataformas SSD?

http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx
"Um índice agrupado determina a ordem física dos dados em uma tabela."

Em uma plataforma de disco físico, o design para considerá-los faz sentido para mim, pois uma varredura física dos dados para recuperar linhas "sequenciais" pode ter mais desempenho do que uma busca na tabela.
Em uma plataforma SSD, todos os acessos de leitura de dados usam uma busca idêntica. Não há conceito de "ordem física" e as leituras de dados não são "sequenciais" no sentido de que os bits são armazenados no mesmo pedaço de silício.

Portanto, no processo de design de um banco de dados de aplicativo , a consideração do índice clusterizado é relevante para esta plataforma?

Meu pensamento inicial é que não é porque a ideia de "dados ordenados" não se aplica ao armazenamento de SSDs e à otimização de busca/recuperação.

EDIT: Eu sei que o SQL Server criará um, só estou filosofando se faz sentido pensar nisso durante o design/otimização.

sql-server clustered-index
  • 3 3 respostas
  • 3277 Views

3 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2011-11-29T12:09:49+08:002011-11-29T12:09:49+08:00

    Faça a si mesmo outra pergunta: se todo o banco de dados estiver na memória e eu nunca precisar mexer no disco, quero armazenar meus dados em uma árvore B ordenada ou quero armazenar meus dados em uma pilha não ordenada?

    A resposta a esta pergunta dependerá do seu padrão de acesso. Na maioria dos casos, seu acesso requer pesquisa de linha única (ou seja, buscas) e varreduras de intervalo. Esses padrões de acesso requerem um B-Tree, caso contrário, eles são ineficientes. Alguns outros padrões de acesso, comuns em DW e OLAP, sempre fazem agregações em toda a tabela de ponta a ponta e não se beneficiam das varreduras de intervalo. À medida que você avança, outros requisitos vêm à tona, como a velocidade de inserção e alocação em um heap versus a árvore B pode desempenhar um papel importante para grandes trabalhos de transferência de ETL. Mas, na maioria das vezes, a resposta realmente se resume a uma pergunta: você procura ou faz uma varredura de alcance? O número esmagador de vezes que a resposta é SIM. E, portanto, o número esmagador de vezes que o design requer um índice agrupado.

    Em outras palavras: só porque é barato lê-lo do disco em ordem aleatória, não significa que você pode destruir seus TLBs e linhas L2 em uma bonança de varredura de RAM de 64 Gb ...

    • 35
  2. Bill Karwin
    2011-11-29T11:42:23+08:002011-11-29T11:42:23+08:00

    Se você usar um índice clusterizado bem escolhido, é mais provável que obtenha todos os dados relacionados necessários em menos páginas de dados. Ou seja, você pode armazenar os dados necessários em menos memória. Isso oferece um benefício, independentemente de você usar discos giratórios ou SSD.

    Mas você está certo de que o outro benefício de um índice clusterizado - para ler/gravar dados relacionados sequencialmente em vez de muitas buscas de disco - não é um benefício significativo para o SSD, onde as buscas não são uma sobrecarga de desempenho tão grande quanto estão com discos giratórios.


    Refiro-me ao comentário de @Matthew PK.

    É claro que o local A na RAM é tão rápido quanto o local B na RAM. Essa não é a questão. Estou falando sobre o caso em que todos os dados de que você precisa não cabem na RAM se os dados estiverem espalhados por muitas páginas. Qualquer página pode conter apenas uma pequena quantidade de dados nos quais você está interessado. Portanto, o RDBMS precisa continuar carregando e limpando as páginas conforme você acessa A, B e outras linhas. É aí que você obtém a penalidade de desempenho.

    Seria melhor que cada página estivesse cheia de dados nos quais você está interessado, na esperança de que todas as solicitações de linha subsequentes sejam atendidas a partir de páginas na RAM. Usar um índice clusterizado é uma boa maneira de garantir que seus dados sejam agrupados em menos páginas.

    • 23
  3. Thomas Stringer
    2011-11-29T11:43:08+08:002011-11-29T11:43:08+08:00

    Sim, absolutamente ainda faz sentido. Você está pensando em um nível muito baixo em sua abordagem. O SQL Server (em uma explicação muito simplificada ) armazena dados agrupados em uma arquitetura de árvore B. Isso permite a recuperação rápida de dados com base nos valores de chave de índice clusterizado.

    Um heap (sem índice clusterizado) não possui ordem sequencial de dados. A coisa mais importante a considerar aqui é que as páginas de dados não estão vinculadas em uma lista vinculada .

    Portanto, a resposta é sim, ainda faz sentido criar índices clusterizados em tabelas, mesmo em um SSD. Tudo se baseia na quantidade de dados que o SQL Server precisa filtrar para chegar aos dados resultantes. Com uma busca de índice clusterizado, ela é minimizada.

    Referência: http://msdn.microsoft.com/en-us/library/ms189051.aspx

    • 13

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

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

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

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

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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