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 / 160709
Accepted
Zapnologica
Zapnologica
Asked: 2017-01-12 03:36:54 +0800 CST2017-01-12 03:36:54 +0800 CST 2017-01-12 03:36:54 +0800 CST

datahora2(0) vs datahora2(2)

  • 772

De acordo com a documentação datetime2 (Transact-SQL) :

Tamanho de armazenamento
6 bytes para precisões menores que 3.
7 bytes para precisões 3 e 4.
Todas as outras precisões requerem 8 bytes.

O tamanho de datetime2(0), datetime2(1), datetime2(2)usa a mesma quantidade de armazenamento (6 bytes).

Estaria correto ao dizer que poderia muito bem seguir datetime2(2)e obter o benefício da precisão sem nenhum custo adicional de tamanho?

Observe:

  • Esta coluna é indexada com o PK para formar um índice clusterizado composto (usado para particionamento de tabela)
  • Eu não me importo com milissegundos

A CPU seria datetime2(0)mais eficiente quando usada em uma cláusula where ou ao buscar por meio de um índice?

Esta é uma tabela enorme, então a menor otimização fará uma grande diferença.

sql-server sql-server-2016
  • 1 1 respostas
  • 17077 Views

1 respostas

  • Voted
  1. Best Answer
    Dan Guzman
    2017-01-12T04:19:15+08:002017-01-12T04:19:15+08:00

    O tamanho de dateTime2(0), dateTime2(1), dateTime2(2), dateTime2(3) usa a mesma quantidade de armazenamento. (6 bytes)

    Estaria correto ao dizer que poderia muito bem ir com dateTime2(3) e obter o benefício da precisão sem nenhum custo adicional de tamanho.

    Não, você interpretou mal a documentação. Observe que o documento indica o tamanho de armazenamento de 6 bytes para precisões menores que 3 (ênfase minha). Portanto, uma precisão igual a 3 exigirá 7 bytes.

    Se você não se importa com milissegundos, datetime2(0)seria o tipo de dados e a precisão adequados. A melhor prática é especificar o tipo de dados adequado e a precisão com base nos dados armazenados, pois isso fornecerá armazenamento e eficiência ideais de forma inerente. Dito isso, não esperaria um impacto significativo no desempenho com base na precisão datetime2 especificada, desde que o tamanho do armazenamento seja o mesmo, mas não testei especificamente isso sozinho.

    Os requisitos do aplicativo ditarão o que deve ser armazenado no banco de dados quando uma maior precisão estiver disponível na fonte. Por exemplo, para um tempo de entrada de pedido proveniente de SYSDATETIME(), os usuários podem não querer uma precisão de 100 nanossegundos. Mais uma vez, escolha o tipo de dados e a precisão para o novo desenvolvimento de acordo com os requisitos e, em geral, você obterá o desempenho ideal sem pensar muito:

    • data - você não precisa de tempo
    • smalldatetime - você não precisa de segundos
    • datetime2(0) - você não precisa de segundos fracionários
    • datetime2(1-7) - você precisa de segundos fracionários da precisão especificada
    • datetimeoffset(0-7) - você precisa de data e hora com reconhecimento de fuso horário
    • time(0-7) - você precisa apenas de tempo (sem data) com segundos fracionários da precisão especificada

    Embora datetime2 seja mais apropriado para novos desenvolvimentos conforme listado acima, às vezes pode ser necessário usar datetime (precisão fixa 3 com precisão de 1/300 segundos fracionários) em vez de compatibilidade com aplicativos de data e hora herdados, evitando assim conversões implícitas e comportamento de comparação inesperado, mas em a despesa de precisão de fração de segundo e maior armazenamento.

    Considere que armazenar uma precisão maior do que a necessária também pode ter um custo de desenvolvimento. Se alguém armazenar um componente de tempo com segundos fracionários quando apenas a precisão do segundo inteiro for necessária, as consultas ainda precisarão considerar os segundos fracionários para retornar os resultados corretos. Por exemplo, com um aplicativo em que o usuário seleciona um intervalo de tempo por meio de uma interface do usuário que permite apenas segundos inteiros, o código do aplicativo precisaria contabilizar os segundos fracionários no valor do intervalo de tempo final e ajustar o valor fornecido pelo usuário de acordo (por exemplo, WHERE OrderEntryTime BETWEEN '2017-01-11T08:00:00.00.00' AND '2017-01-11T08:59:59.99'ou WHERE OrderEntryTime >= '2017-01-11T08:00:00.00' AND OrderEntryTime < '2017-01-11T09:00:00.00'). Isso adicionará complexidade ao código.

    • 31

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