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 / 237128
Accepted
elbillaf
elbillaf
Asked: 2019-05-02 06:05:04 +0800 CST2019-05-02 06:05:04 +0800 CST 2019-05-02 06:05:04 +0800 CST

Usando o tamanho da coluna muito maior do que o necessário

  • 772

Estou criando um banco de dados SQL Server com outra pessoa. Uma das tabelas é pequena (6 linhas) com dados que provavelmente permanecerão constantes. Existe uma possibilidade remota de que uma nova linha seja adicionada. A tabela fica mais ou menos assim:

CREATE TABLE someTable (
    id int primary key identity(1,1) not null,
    name varchar(128) not null unique
    );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

Estou olhando para o comprimento de caracteres dessa namecoluna e acho que seus valores provavelmente nunca serão maiores que, digamos, 32 caracteres, talvez nem maiores que 24. Há alguma vantagem em mudar essa coluna para, por exemplo, varchar(32)?

Além disso, há alguma vantagem em manter os tamanhos de coluna padrão em múltiplos de 4, 8, 32, etc?

sql-server database-design
  • 2 2 respostas
  • 3102 Views

2 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2019-05-02T06:21:06+08:002019-05-02T06:21:06+08:00

    O SQL Server usa comprimentos de coluna ao alocar memória para processamento de consulta. Então, sim, resumindo, você deve sempre dimensionar as colunas adequadamente para os dados.

    As alocações de memória são baseadas no número de linhas retornadas pela consulta multiplicado pela metade do comprimento declarado da coluna.

    Dito isto, neste caso em que você tem 6 linhas, você provavelmente não deseja otimizar prematuramente. A menos que você JOIN esta tabela para outra com milhões de linhas, não haverá uma grande diferença entre um varchar(24) e um varchar(32), ou mesmo um varchar(128).

    Sua segunda pergunta é sobre o alinhamento dos comprimentos das colunas em múltiplos binários. Isso não é necessário, pois o SQL Server armazena todos os dados em páginas de 8 KB, independentemente do comprimento de cada coluna.

    • 15
  2. Aaron Bertrand
    2019-05-02T06:24:16+08:002019-05-02T06:24:16+08:00

    Com 6 linhas, não, não haverá benefício observável. Essa tabela inteira caberá em uma única página, portanto, diminuir o espaço máximo potencial que você usará nessa página enquanto ainda ocupa essa página inteira não é diferente em todo o sentido prático.

    Em mesas maiores, porém, o dimensionamento correto é crucial. A razão é que as estimativas de memória serão baseadas na suposição de que cada valor será 50% preenchido. Portanto, se você tiver varchar(128), cada valor esperará ocupar 64 bytes, independentemente dos dados reais, portanto, as concessões de memória serão 64b * número de linhas. Se todos os valores tiverem 32 caracteres ou menos, torná-lo um varchar(64) ou mesmo varchar(32) é provavelmente uma escolha melhor. Se uma grande porcentagem de valores estiver próxima ou no limite, você pode até argumentar para que o char tire a volatilidade dele.

    Quanto aos benefícios de ter comprimentos de string limitados a potências de 2, não acho que no hardware de hoje alguém possa demonstrar quaisquer vantagens óbvias.

    • 14

relate perguntas

  • 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?

  • Quais são algumas maneiras de implementar um relacionamento muitos-para-muitos em um data warehouse?

  • 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