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-62605

motoDrizzt's questions

Martin Hope
motoDrizzt
Asked: 2018-09-14 02:21:19 +0800 CST

O UDF é usado por um procedimento armazenado otimizado/mesclado no próprio SP?

  • 2

O problema me deixou louco por alguns dias, posso ter encontrado minha resposta, mas preciso de uma confirmação e verificar uma eventual solução fácil.

Quando um procedimento armazenado usa algumas funções definidas pelo usuário, os planos UDF são mesclados no plano principal e tudo é otimizado ou eles são chamados diretamente todas as vezes?

E suponha que isso não aconteça, existe uma maneira de forçar o SQL Server a fazer isso para um SP específico?

sql-server optimization
  • 1 respostas
  • 94 Views
Martin Hope
motoDrizzt
Asked: 2018-07-31 03:28:24 +0800 CST

Plano Sql Server - o que é um filtro após uma operação de índice?

  • 1

Encontrei essa condição ao otimizar um SP, há uma parte do plano de execução que realmente não entendo: o SQL Server faz uma varredura de índice e filtra os resultados. Qual é a razão para o SQL Server fazer isso, em vez de fazer tudo na varredura de índice ?

Por exemplo:

insira a descrição da imagem aqui

O índice já contém todos os campos usados ​​pelo WHERE . Expandi a operação Index Scan , e ela executa parte do where com alguns parâmetros envolvidos (totalmente esperado). Em seguida, expandi e inspecionei a operação Filter , e o que ela faz é aplicar alguma outra filtragem em alguns campos de data e hora já avaliados pelo Index Scan , além de algumas outras condições em alguns outros parâmetros do SP.

O que está acontecendo aqui? Obviamente, não me importo com minha consulta específica, esse não é o ponto, estou tentando entender quais condições podem fazer com que isso aconteça.

execution-plan sql-server-2016
  • 1 respostas
  • 936 Views
Martin Hope
motoDrizzt
Asked: 2018-06-22 06:19:27 +0800 CST

SQL Server - exibição materializada (indexada) não está funcionando conforme o esperado

  • 0

Criei uma visão materializada no SQL Server, mas ao selecionar a partir dela obtenho os mesmos desempenhos e o mesmo plano de execução do que quando seleciono da mesma consulta não "materializada".

A visão é simples:

CREATE VIEW TestView WITH SCHEMABINDING
AS
SELECT TAB_A.C1, TAB_A.C2, TAB_A.C3
FROM TAB1
INNER JOIN TAB2 ON TAB1.C2 = TAB2.C2
INNER JOIN TAB3 ON TAB2.C1 = TAB3.C1;


CREATE UNIQUE CLUSTERED INDEX IX_TestView
    ON TestView(C1, C2, C3);

Agora, quando eu faço algo como

SELECT C1 FROM TestView

Eu esperaria ver no plano apenas um acesso à visão e nada mais, em vez disso, ele acessa as tabelas subjacentes como se a visão nem existisse. Eu recebo exatamente o mesmo plano e o mesmo tempo de execução também.

O que estou fazendo errado? Se o SQL Server não puder "materializar" a exibição, esperaria pelo menos obter um erro ao criá-la.

sql-server materialized-view
  • 1 respostas
  • 258 Views
Martin Hope
motoDrizzt
Asked: 2018-05-28 12:10:10 +0800 CST

As tabelas relacionais devem conter dados e não lógica - correto?

  • 2

Ok, não consegui encontrar um título melhor, para ser honesto.

Recentemente, cheguei a um novo local de trabalho e me pediram para ajudar com o banco de dados. Eu queria tentar explicar um conceito, mas não tenho certeza de como expressar isso na melhor das hipóteses, e talvez esse conceito já tenha uma explicação melhor e um nome também. Eu não me classifico como um especialista em DB, então gostaria de apresentar a eles algo mais oficial do que meu próprio ponto de vista, não importa quantos bons DBs eu tenha projetado em minha vida.

Uma das coisas que achei mais divertidas (mas não no bom sentido) é que eles parecem seguir o design do db de acordo com a lógica do problema e não de acordo com "este é um banco de dados, deve conter dados", então por exemplo para saber se um elemento está em uma determinada categoria, a consulta fica assim (em pseudocódigo):

SELECT Column1, Column2...ColumnN 
FROM Invoices [LIST OF JOIN]
WHERE
Invoces.Field1 IN 
    (TableA WHERE TableA.Field NOT IN 
        (TableB WHERE TableB.Field IN ((TableC WHERE) OR (TableD WHERE)))
OR Invoces.Field1 NOT IN 
    (TableB WHERE TableB.Field IN ((TableC WHERE) AND (TableD WHERE))
OR TableB.Field IN 
    (TableC WHERE TableC.Field IN (TableC WHERE))
OR TableB.Field NOT IN 
    (TableC WHERE TableC.Field NOT IN (TableD WHERE))

e assim por diante para outras vinte condições. Não, não estou brincando.

Isso acontece porque ao invés de dizer "esta é uma fatura e sua categoria é um atributo da própria fatura", eles vão até o fim com coisas como "a fatura foi inserida por aquele usuário, naquele dia, e ele poderia ter inserido em um determinado departamento ou em nenhum, e no caso do departamento, então esse departamento pode ser parte de uma certa estrutura..." e assim por diante. Não é nem uma questão de integridade referencial, não há FKs neste caso...

Outro exemplo prático é a data da última edição de um documento: ao invés de ser armazenado como um atributo, é calculado por uma função que segue algo assim:

se esse documento estiver relacionado a outro, então se o outro for deste tipo, então se o primeiro documento estiver relacionado a este outro documento também, então a data da última edição é a data em que o administrador imprimiu o calendário diário de compromissos". .

claramente com um monte de outros para cada se, também. E, não é porque há algum tipo de dependência, é apenas porque muitas coisas são armazenadas para refletir sua lógica.

De certa forma, ficaria tentado a dizer "escreva uma vez, leia muitos", com o significado de "escreva esse atributo uma vez e depois leia de graça quantas vezes precisar", porque temos uma baixa frequência de gravações e uma frequência muito alta de leituras, e claramente todas as leituras devem sempre recalcular tudo. Mas tenho a sensação de que deve haver algum princípio que diz que você deve projetar bancos de dados para armazenar dados...

database-design design-pattern
  • 1 respostas
  • 71 Views
Martin Hope
motoDrizzt
Asked: 2018-05-27 23:51:47 +0800 CST

Curto-circuito em JOIN

  • 3

Já procurei em todos os lugares mas não consegui encontrar nada a respeito, parece que todo mundo está preocupado apenas com WHERE e CASE. (e não tenho um SQL Server disponível para verificar por mim mesmo)

Então, uma pergunta simples: o JOIN de curto-circuito do SQL Server é baseado na condição JOIN? Se eu escrever:

TableA LEFT OUTER JOIN TableB ON 1=0 AND TableA.ID = TableB.A_ID

O SQL Server ignorará a junção?


Editar

Ok, alguém apontou corretamente que isso é resolvido em tempo de compilação, então é melhor eu expandir a questão.

O acima foi apenas um exemplo, mas acabou sendo ruim. O que eu queria saber é se o SQL Server causa um curto-circuito em um JOIN quando essa condição acontece em tempo de execução, como consequência de um @parameter passado para um procedimento armazenado.

Estou perguntando porque tenho certeza de ter usado algo assim nos anos, mas queria ter 100% de certeza antes de falar sobre isso com alguns colegas. Então, o SQL Server fará um curto-circuito nisso, então:

TableA LEFT OUTER JOIN TableB ON @parameter IS NOT NULL AND TableA.ID = TableB.A_ID

se estiver dentro de um SP e for chamado com @parameter definido como NULL? Fará alguma diferença se o procedimento de armazenamento for COM RECOMPILAR?

sql-server t-sql
  • 2 respostas
  • 1443 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