Eu pensei ter lido em algum lugar que escrever no tempdb é mais rápido do que uma tabela real que não está no tempdb. Isso é verdade em qualquer capacidade? Eu pensei que me lembro de dizer algo especial sobre tempdb e armazenar os dados na memória?
Percebi que em um servidor que executa o SQL Server 2016 SP1 CU6, às vezes, uma sessão de eventos estendidos mostra uma consulta SELECT causando gravações. Por exemplo:
O plano de execução não mostra nenhuma causa óbvia para as gravações, como uma tabela de hash, spool ou classificação que pode ser derramada no TempDB:
A atribuição de variável a um tipo MAX ou uma atualização automática de estatísticas também pode causar isso, mas também não foi a causa das gravações nesse caso.
De que mais poderiam ser as gravações?
Revendo esta pergunta , parece que há muito trabalho que não deveria ser necessário. Eles estão tentando estender um intervalo com uma data. Em outros bancos de dados, você usaria apenas greatest
e least
..
least(extendDate,min), greatest(extendDate,max)
Quando eu tento usá-los, porém, recebo
'least' is not a recognized built-in function name.
'greatest' is not a recognized built-in function name.
Isso cobriria a extensão em qualquer direção.
Para os propósitos da pergunta, você ainda teria que fazer a substituição de intervalo exclusivo.
Eu só estou querendo saber como os usuários do SQL Server implementam padrões de consulta para imitar least
e greatest
funcionalidade.
- PostgreSQL
GREATEST
/LEAST
- MySQL
GREATEST
/LEAST
- MariaDB
GREATEST
LEAST
- DB2
GREATEST
LEAST
- Oráculo
GREATEST
LEAST
Você desdobra as condições em CASE
declarações ou existe uma extensão, complemento de terceiros ou licença da Microsoft que habilita essa funcionalidade?
Ao usar o relacionamento de muitos para muitos, o resultado é dividido em várias linhas. O que eu gostaria de fazer é converter o lado direito de uma junção em uma matriz para que o resultado seja uma linha.
Exemplo com 3 tabelas:
CREATE TABLE items (
id serial primary key,
title text
);
CREATE TABLE tags (
id serial primary key,
title text
);
CREATE TABLE items_tags (
item_id int references items(id),
tag_id int references tags(id),
primary key (item_id, tag_id)
);
Ao selecionar itens com suas tags, posso fazer assim:
SELECT i.id, i.title, i.title
FROM items i
INNER JOIN items_tags it
ON it.item_id = i.id
INNER JOIN tags t
ON t.id = it.tag_id;
E o resultado será:
(1, "item n1", "sport")
(1, "item n1", "soccer")
(2, "item n2", "adventure")
(2, "item n2", "mountain climbing")
(2, "item n2", "sport")
(2, "item n2", "nature")
O que eu gostaria de ter é isso:
(1, "item n1", ["sport", "soccer"])
(2, "item n2", ["adventure", "mountain climbing", "sport" , "nature"])
Estamos começando a provisionar um conjunto de servidores físicos para um cluster virtual de nós do SQL Server 2016 no VMware. Estaremos utilizando licenças Enterprise Edition.
Planejamos configurar 6 nós, mas há um pouco de debate sobre qual a maneira ideal de provisionar os servidores físicos com relação à velocidade do clock da CPU versus a contagem de núcleos da CPU.
Eu sei que isso depende em grande parte do volume de transações e do número de bancos de dados armazenados entre outros fatores específicos do software, mas há uma regra geral recomendada?
Por exemplo, um servidor físico duplo de 8 núcleos e 3,2 GHz (16 núcleos) é mais preferencial do que um servidor duplo de 16 núcleos e 2,6 GHz (32 núcleos)?
Alguém já se deparou com um white paper que aprofunde esse tipo de tópico?
Eu tenho algum T-SQL gerado automaticamente, que provavelmente é válido, mas realmente não entendo.
ALTER TABLE [dbo].[MyTable]
WITH CHECK
CHECK CONSTRAINT [My_FORIEGN_KEY];
Eu sei o que é uma restrição de chave estrangeira, mas qual é o CHECK CHECK
?
Tenho duas tabelas, table_a (id, name) e table_b (id), digamos no Oracle 12c.
Por que esta consulta não retorna uma exceção?
select * from table_a where name in (select name from table_b);
Pelo que entendi, a Oracle vê isso como
select * from table_a where name = name;
Mas o que eu não entendo é por quê?
O título diz tudo, existe uma maneira de listar rapidamente todos os links de banco de dados atuais no oracle?
Algo na mesma linha que isso, que lista as tabelas do usuário atual:
select * from user_tables;
Obrigado, G.C.
Entendo um benefício das chaves substitutas/artificiais em geral - elas não mudam e isso pode ser muito conveniente. Isso é verdade, sejam campos únicos ou múltiplos - desde que sejam 'artificiais'.
No entanto, às vezes parece ser uma questão de política ter um campo inteiro de incremento automático como a chave primária de cada tabela. É sempre a melhor ideia ter uma chave de campo único e por que (ou por que não)?
Para ser claro, esta questão não é sobre artificial versus natural - mas sobre se todas as chaves artificiais devem ser de um único campo
Sobre SQL (Computação/Bancos de Dados):
Quando temos dois ou mais campos em uma tabela que, juntos, identificam seus registros de forma única, qual a forma correta de chamá-los? Chaves compostas ou compostas?
Eu vi na web ambos os usos, então não tenho certeza.