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 / user-33092

Zapnologica's questions

Martin Hope
Zapnologica
Asked: 2020-05-07 21:34:03 +0800 CST

O incremento automático na chave primária impede inserções simultâneas? [duplicado]

  • 0
Essa pergunta já tem respostas aqui :
Coluna de identidade em simultaneidade, multithreading, processamento paralelo (2 respostas)
Fechado há 2 anos .

Eu tenho uma tabela de log do Sql Server, que está sendo inserida continuamente, quero revisar o design desta tabela.

Atualmente, estamos usando um GUID como o PK, porque o software pode gerar isso e nós apenas o inserimos, e esperamos que várias inserções não bloqueiem umas às outras. No entanto, UniqueId não é um PK muito eficiente para uma tabela e nossos índices são muito grandes e fragmentados.

Se eu alterar essa coluna para um longcom auto-incrementenabled. Isso se tornará um gargalo de inserção simultânea?

Eu não preciso que minha chave primária esteja em qualquer tipo de ordem, apenas um id exclusivo para essa linha?

sql-server azure-sql-database
  • 1 respostas
  • 509 Views
Martin Hope
Zapnologica
Asked: 2017-12-27 23:42:20 +0800 CST

Índice duplicado questionável sugerido pela otimização

  • 6

Bom dia, tenho a seguinte tabela de banco de dados sql server: insira a descrição da imagem aqui

Observe a chave primária composta. Isso foi feito por 3 motivos:

  • Impedir entradas duplicadas
  • Melhore o desempenho da consulta, pois todas as consultas terão todas as 3 chaves.
  • Precisávamos e indexamos, e eu não queria introduzir um ID aleatório.

Observe também que esta tabela foi projetada com seu tamanho em mente. Esta tabela armazenará milhões e milhões de linhas de dados.

OK agora para a minha pergunta real. Estou usando o azure sql server para hospedar este banco de dados. e habilitei o ajuste automático. E, estranhamente, vejo que ele foi e criou um novo índice. (Veja abaixo)

insira a descrição da imagem aqui

Agora, na minha mente, isso parece ser um índice duplicado, pois as mesmas colunas estão sendo indexadas.

Então agora eu tenho dois índices na minha tabela:

Original (Meu PK):

ALTER TABLE [dbo].[SensorDataRaw] ADD  CONSTRAINT [PK_SensorDataRaw] PRIMARY KEY CLUSTERED 
(
    [DateTime] ASC,
    [SensorId] ASC,
    [Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

Recém-adicionado (criado automaticamente pelo ajuste do Azure):

CREATE NONCLUSTERED INDEX [nci_wi_SensorDataRaw_DC9789077DA75B4440AC8BFE3E2AA198] ON [dbo].[SensorDataRaw]
(
    [Key] ASC,
    [SensorId] ASC,
    [DateTime] ASC
)
INCLUDE (   [Value]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO

Observações:

  • A ordem das colunas foi invertida no novo índice.
  • O novo índice NÃO é único
  • o novo índice inclui a coluna de valor.

Observe que meu conhecimento sobre índices não é avançado, por isso estou perguntando isso.

Então minha pergunta é:

  1. Alguém pode explicar por que o índice recém-adicionado é melhor do que o meu criado inicialmente.
  2. Como posso remover os dois índices e apenas criar um que cubra os dois casos. Sendo este um banco de dados tão grande, não posso arcar com o espaço que esses dois índices ocuparão.
  3. O talvez seja uma alternativa de design melhor?

Informação adicional:

Estou assumindo que o tipo de consulta se torna importante aqui, então listei alguns exemplos.

Todas as consultas incluem DateTime, SensorIde Key.

Consultas simples:

Select SensorId Where average value for key w is greater than x where time between (y,z)

Dados gráficos:

SELECT AVG([Value]) AS 'AvgValue',    
    DATEADD( MINUTE, 
    (DATEDIFF(MINUTE, '1990-01-01T00:00:00', [dbo].[SensorDataRaw].
[DateTime]) / @IntervalInMinutes) * @IntervalInMinutes,
        '1990-01-01T00:00:00'
    )      AS 'TimeGroup'
 FROM [dbo].[SensorDataRaw]
 where 
    [dbo].[SensorDataRaw].[SensorId] = @SensorId
    and [dbo].[SensorDataRaw].[Key] = @KeyValue
    and [dbo].[SensorDataRaw].[DateTime] Between @DateFrom and @DateTo
    and [dbo].[SensorDataRaw].[Value] IS NOT NULL  
  GROUP BY (DATEDIFF(MINUTE, '1990-01-01T00:00:00', [dbo].[SensorDataRaw].
    [DateTime]) / @IntervalInMinutes)
sql-server index
  • 3 respostas
  • 1123 Views
Martin Hope
Zapnologica
Asked: 2017-01-12 03:36:54 +0800 CST

datahora2(0) vs datahora2(2)

  • 18

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 respostas
  • 17077 Views
Martin Hope
Zapnologica
Asked: 2016-12-31 01:48:26 +0800 CST

O SQL Server 2016 Standard Edition oferece suporte ao particionamento de tabela?

  • 9

Desejo atualizar meu SQL Server 2008 Enterprise Edition para o SQL Server 2016 Standard Edition; no entanto, um banco de dados faz uso de partições de tabela em vários grupos de arquivos (usado em uma grande tabela de log, cada dia é uma partição)

Vejo em Edições e recursos com suporte para SQL Server 2016 na seção "RDBMS Scalability and Performance", que diz que a Standard Edition oferece suporte ao particionamento de tabela e índice , mas não oferece suporte ao paralelismo de tabela particionada .

Não tenho certeza de que compreendo totalmente as consequências disso.

O que exatamente isso significa no meu caso e como isso afetará o desempenho do banco de dados?

sql-server partitioning
  • 2 respostas
  • 26485 Views

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