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 / 27719
Accepted
孔夫子
孔夫子
Asked: 2012-10-27 17:07:09 +0800 CST2012-10-27 17:07:09 +0800 CST 2012-10-27 17:07:09 +0800 CST

Crie um guia de plano para armazenar em cache (lazy spool) o resultado da CTE

  • 772

Normalmente, crio guias de plano construindo primeiro uma consulta que usa o plano correto e copiando-a para a consulta semelhante que não usa. No entanto, isso às vezes é complicado, especialmente se a consulta não for exatamente a mesma. Qual é a maneira correta de criar guias de plano do zero?

O SQLKiwi mencionou a elaboração de planos no SSIS, existe uma maneira ou ferramenta útil para auxiliar na elaboração de um bom plano para o SQL Server?

A instância específica em questão é esta CTE: SQLFiddle

with cte(guid,other) as (
  select newid(),1 union all
  select newid(),2 union all
  select newid(),3)
select a.guid, a.other, b.guid guidb, b.other otherb
from cte a
cross join cte b
order by a.other, b.other;

Existe ALGUMA maneira de fazer com que o resultado apareça com exatamente 3 guids distintos e não mais? Espero poder responder melhor às perguntas no futuro, incluindo guias de plano com consultas do tipo CTE que são referenciadas várias vezes para superar algumas peculiaridades do SQL Server CTE.

sql-server t-sql
  • 5 5 respostas
  • 3007 Views

5 respostas

  • Voted
  1. Best Answer
    Paul White
    2012-10-28T22:47:55+08:002012-10-28T22:47:55+08:00

    Existe ALGUMA maneira de fazer com que o resultado apareça com exatamente 3 guids distintos e não mais? Espero poder responder melhor às perguntas no futuro, incluindo guias de plano com consultas do tipo CTE que são referenciadas várias vezes para superar algumas peculiaridades do SQL Server CTE.

    Hoje nao. Expressões de tabela comuns (CTEs) não recursivas são tratadas como definições de exibição em linha e expandidas na árvore de consulta lógica em cada local em que são referenciadas (assim como as definições de exibição regulares são) antes da otimização. A árvore lógica para sua consulta é:

    LogOp_OrderByCOL: Union1007 ASC COL: Union1015 ASC 
        LogOp_Project COL: Union1006 COL: Union1007 COL: Union1014 COL: Union1015
            LogOp_Join
                LogOp_ViewAnchor
                    LogOp_UnionAll
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
    
                LogOp_ViewAnchor
                    LogOp_UnionAll
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
                        LogOp_Project ScaOp_Intrinsic newid, ScaOp_Const
    

    Observe as duas View Anchors e as seis chamadas para a função intrínseca newidantes que a otimização seja iniciada. No entanto, muitas pessoas consideram que o otimizador deve ser capaz de identificar que as subárvores expandidas eram originalmente um único objeto referenciado e simplificar de acordo. Também houve várias solicitações de conexão para permitir a materialização explícita de uma CTE ou tabela derivada.

    Uma implementação mais geral faria com que o otimizador considerasse a materialização de expressões comuns arbitrárias para melhorar o desempenho ( CASEcom uma subconsulta é outro exemplo em que os problemas podem ocorrer hoje). A Microsoft Research publicou um artigo (PDF) sobre isso em 2007, embora ainda não tenha sido implementado. Por enquanto, estamos limitados à materialização explícita usando coisas como variáveis ​​de tabela e tabelas temporárias.

    O SQLKiwi mencionou a elaboração de planos no SSIS, existe uma maneira ou ferramenta útil para auxiliar na elaboração de um bom plano para o SQL Server?

    Isso foi apenas uma ilusão da minha parte e foi muito além da ideia de modificar os guias do plano. É possível, em princípio, escrever uma ferramenta para manipular o show plan XML diretamente, mas sem a instrumentação específica do otimizador, usar a ferramenta provavelmente seria uma experiência frustrante para o usuário (e para o desenvolvedor que pensa nisso).

    No contexto específico desta questão, tal ferramenta ainda seria incapaz de materializar o conteúdo CTE de uma forma que pudesse ser usada por vários consumidores (para alimentar ambas as entradas para a junção cruzada neste caso). O otimizador e o mecanismo de execução suportam spools de vários consumidores, mas apenas para fins específicos - nenhum dos quais pode ser aplicado a este exemplo específico.

    Embora não tenha certeza, tenho um palpite bastante forte de que os RelOps podem ser seguidos (Nested Loop, Lazy Spool) mesmo que a consulta não seja exatamente igual ao plano - por exemplo, se você adicionou 4 e 5 ao CTE , ele ainda continua a usar o mesmo plano (aparentemente - testado no SQL Server 2012 RTM Express).

    Há uma quantidade razoável de flexibilidade aqui. A forma ampla do plano XML é usada para guiar a busca por um plano final (embora muitos atributos sejam completamente ignorados, por exemplo, tipo de particionamento em trocas) e as regras normais de busca também são consideravelmente relaxadas. Por exemplo, a remoção antecipada de alternativas com base em considerações de custo é desativada, a introdução explícita de junções cruzadas é permitida e as operações escalares são ignoradas.

    Há muitos detalhes para aprofundar, mas a colocação de filtros e escalares de computação não pode ser forçada e os predicados do formulário column = valuesão generalizados para que um plano contendo X = 1ou X = @Xpossa ser aplicado a uma consulta contendo X = 502ou X = @Y. Essa flexibilidade específica pode ajudar muito a encontrar um plano natural para forçar.

    No exemplo específico, a constante Union All sempre pode ser implementada como um Constant Scan; o número de entradas para o Union All não importa.

    • 14
  2. 孔夫子
    2012-10-28T02:21:06+08:002012-10-28T02:21:06+08:00

    Não há como (versões do SQL Server até 2012) reutilizar um único spool para ambas as ocorrências do CTE. Os detalhes podem ser encontrados na resposta do SQLKiwi. Mais abaixo estão duas formas de materializar o CTE duas vezes, o que é inevitável pela natureza da consulta. Ambas as opções resultam em uma contagem líquida distinta de guid de 6.

    O link do comentário de Martin para o site de Quassnoi em um blog sobre o planejamento de um CTE foi uma inspiração parcial para esta pergunta. Ele descreve uma maneira de materializar um CTE para fins de uma subconsulta correlacionada, que é referenciada apenas uma vez, embora a correlação possa fazer com que ela seja avaliada várias vezes. Isso não se aplica à consulta na pergunta.

    Opção 1 - Guia do Plano

    Pegando dicas da resposta do SQLKiwi, reduzi o guia a um mínimo que ainda fará o trabalho, por exemplo, os ConstantScannós listam apenas 2 operadores escalares que podem se expandir suficientemente para qualquer número.

    ;with cte(guid,other) as (
      select newid(),1 union all
      select newid(),2 union all
      select newid(),3)
    select a.guid, a.other, b.guid guidb, b.other otherb
    from cte a
    cross join cte b
    order by a.other, b.other
    OPTION(USE PLAN
    N'<?xml version="1.0" encoding="utf-16"?>
    <ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.2" Build="11.0.2100.60" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
      <BatchSequence>
        <Batch>
          <Statements>
            <StmtSimple StatementCompId="1" StatementEstRows="1600" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" StatementSubTreeCost="0.0444433" StatementText="with cte(guid,other) as (&#xD;&#xA;  select newid(),1 union all&#xD;&#xA;  select newid(),2 union all&#xD;&#xA;  select newid(),3&#xD;&#xA;select a.guid, a.other, b.guid guidb, b.other otherb&#xD;&#xA;from cte a&#xD;&#xA;cross join cte b&#xD;&#xA;order by a.other, b.other;&#xD;&#xA;" StatementType="SELECT" QueryHash="0x43D93EF17C8E55DD" QueryPlanHash="0xF8E3B336792D84" RetrievedFromCache="true">
              <StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
              <QueryPlan NonParallelPlanReason="EstimatedDOPIsOne" CachedPlanSize="96" CompileTime="13" CompileCPU="13" CompileMemory="1152">
                <MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
                <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="157240" EstimatedPagesCached="1420" EstimatedAvailableDegreeOfParallelism="1" />
                <RelOp AvgRowSize="47" EstimateCPU="0.006688" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1600" LogicalOp="Inner Join" NodeId="0" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0444433">
                  <OutputList>
                    <ColumnReference Column="Union1163" />
                  </OutputList>
                  <Warnings NoJoinPredicate="true" />
                  <NestedLoops Optimized="false">
                    <RelOp AvgRowSize="27" EstimateCPU="0.000432115" EstimateIO="0.0112613" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="40" LogicalOp="Sort" NodeId="1" Parallel="false" PhysicalOp="Sort" EstimatedTotalSubtreeCost="0.0117335">
                      <OutputList>
                        <ColumnReference Column="Union1080" />
                        <ColumnReference Column="Union1081" />
                      </OutputList>
                      <MemoryFractions Input="0" Output="0" />
                      <Sort Distinct="false">
                        <OrderBy>
                          <OrderByColumn Ascending="true">
                            <ColumnReference Column="Union1081" />
                          </OrderByColumn>
                        </OrderBy>
                        <RelOp AvgRowSize="27" EstimateCPU="4.0157E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="40" LogicalOp="Constant Scan" NodeId="2" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="4.0157E-05">
                          <OutputList>
                            <ColumnReference Column="Union1080" />
                            <ColumnReference Column="Union1081" />
                          </OutputList>
                          <ConstantScan>
                            <Values>
                              <Row>
                                <ScalarOperator ScalarString="newid()">
                                  <Intrinsic FunctionName="newid" />
                                </ScalarOperator>
                                <ScalarOperator ScalarString="(1)">
                                  <Const ConstValue="(1)" />
                                </ScalarOperator>
                              </Row>
                              <Row>
                                <ScalarOperator ScalarString="newid()">
                                  <Intrinsic FunctionName="newid" />
                                </ScalarOperator>
                                <ScalarOperator ScalarString="(2)">
                                  <Const ConstValue="(2)" />
                                </ScalarOperator>
                              </Row>
                            </Values>
                          </ConstantScan>
                        </RelOp>
                      </Sort>
                    </RelOp>
                    <RelOp AvgRowSize="27" EstimateCPU="0.0001074" EstimateIO="0.01" EstimateRebinds="0" EstimateRewinds="39" EstimatedExecutionMode="Row" EstimateRows="40" LogicalOp="Lazy Spool" NodeId="83" Parallel="false" PhysicalOp="Table Spool" EstimatedTotalSubtreeCost="0.0260217">
                      <OutputList>
                        <ColumnReference Column="Union1162" />
                        <ColumnReference Column="Union1163" />
                      </OutputList>
                      <Spool>
                        <RelOp AvgRowSize="27" EstimateCPU="0.000432115" EstimateIO="0.0112613" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="40" LogicalOp="Sort" NodeId="84" Parallel="false" PhysicalOp="Sort" EstimatedTotalSubtreeCost="0.0117335">
                          <OutputList>
                            <ColumnReference Column="Union1162" />
                            <ColumnReference Column="Union1163" />
                          </OutputList>
                          <MemoryFractions Input="0" Output="0" />
                          <Sort Distinct="false">
                            <OrderBy>
                              <OrderByColumn Ascending="true">
                                <ColumnReference Column="Union1163" />
                              </OrderByColumn>
                            </OrderBy>
                            <RelOp AvgRowSize="27" EstimateCPU="4.0157E-05" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="40" LogicalOp="Constant Scan" NodeId="85" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="4.0157E-05">
                              <OutputList>
                                <ColumnReference Column="Union1162" />
                                <ColumnReference Column="Union1163" />
                              </OutputList>
                              <ConstantScan>
                                <Values>
                                  <Row>
                                    <ScalarOperator ScalarString="newid()">
                                      <Intrinsic FunctionName="newid" />
                                    </ScalarOperator>
                                    <ScalarOperator ScalarString="(1)">
                                      <Const ConstValue="(1)" />
                                    </ScalarOperator>
                                  </Row>
                                  <Row>
                                    <ScalarOperator ScalarString="newid()">
                                      <Intrinsic FunctionName="newid" />
                                    </ScalarOperator>
                                    <ScalarOperator ScalarString="(2)">
                                      <Const ConstValue="(2)" />
                                    </ScalarOperator>
                                  </Row>
                                </Values>
                              </ConstantScan>
                            </RelOp>
                          </Sort>
                        </RelOp>
                      </Spool>
                    </RelOp>
                  </NestedLoops>
                </RelOp>
              </QueryPlan>
            </StmtSimple>
          </Statements>
        </Batch>
      </BatchSequence>
    </ShowPlanXML>'
    );
    

    Opção 2 - Varredura Remota

    Ao aumentar o custo da consulta e introduzir um Remote Scan, o resultado é materializado.

    with cte(guid,other) as (
      select *
      from OPENQUERY([TESTSQL\V2012], '
      select newid(),1 union all
      select newid(),2 union all
      select newid(),3') x)
    select a.guid, a.other, b.guid guidb, b.other otherb
    from cte a
    cross join cte b
    order by a.other, b.other;
    
    • 3
  3. wBob
    2012-10-28T02:08:04+08:002012-10-28T02:08:04+08:00

    Com toda a seriedade, você não pode cortar planos de execução xml do zero. Criá-los usando o SSIS é ficção científica. Sim, é tudo XML, mas são de universos diferentes. Olhando para o blog de Paul sobre esse assunto , ele está dizendo "muito da maneira que o SSIS permite ..." então possivelmente você entendeu mal? Não acho que ele esteja dizendo "use o SSIS para criar planos", mas sim "não seria ótimo poder criar planos usando uma interface de arrastar e soltar como o SSIS". Talvez, para uma consulta muito simples, você possa gerenciar isso, mas é um exagero, possivelmente até uma perda de tempo. Trabalho ocupado, você pode dizer.

    Se estou criando um plano para uma dica ou guia de plano USE PLAN, tenho algumas abordagens. Por exemplo, posso remover registros de tabelas (por exemplo, em uma cópia do banco de dados) para influenciar as estatísticas e encorajar o otimizador a tomar uma decisão diferente. Também usei variáveis ​​de tabela em vez de toda a tabela na consulta para que o otimizador pense que cada tabela contém 1 registro. Em seguida, no plano gerado, substitua todas as variáveis ​​da tabela pelos nomes originais da tabela e troque-os como o plano. Outra opção seria usar a opção WITH STATS_STREAM de UPDATE STATISTICS para falsificar estatísticas, que é o método usado ao clonar cópias de bancos de dados somente estatísticas, por exemplo

    UPDATE STATISTICS 
        [dbo].[yourTable]([PK_yourTable]) 
    WITH 
        STATS_STREAM = 0x0100etc, 
        ROWCOUNT = 10000, 
        PAGECOUNT = 93
    

    Passei algum tempo mexendo com planos de execução xml no passado e descobri que, no final, o SQL apenas diz "Não estou usando isso" e executa a consulta como deseja de qualquer maneira.

    Para o seu exemplo específico, tenho certeza de que você pode usar set rowcount 3 ou TOP 3 na consulta para obter esse resultado, mas acho que esse não é o seu ponto. A resposta correta seria realmente: use uma tabela temporária. Eu votaria a favor disso :) Não é uma resposta correta seria "passar horas até dias cortando seu próprio plano de execução XML personalizado, onde você tenta enganar o otimizador para fazer um spool preguiçoso para o CTE que pode nem funcionar de qualquer maneira, pareceria inteligente mas também seria impossível de manter".

    Não estou tentando ser construtivo, apenas minha opinião - espero que ajude.

    • 2
  4. wBob
    2016-01-15T07:00:20+08:002016-01-15T07:00:20+08:00

    Existe alguma maneira...

    Finalmente no SQL 2016 CTP 3.0 existe uma forma, mais ou menos : )

    Usando o sinalizador de rastreamento e eventos estendidos conforme detalhado por Dmitry Pilugin aqui , você pode (um tanto arbitrariamente) pescar três guids exclusivos dos estágios intermediários da execução da consulta.

    NB Este código NÃO se destina à produção ou uso sério no que diz respeito à imposição do plano CTE, apenas uma visão despreocupada de um novo sinalizador de rastreamento e uma maneira diferente de fazer as coisas:

    -- Configure the XEvents session; with ring buffer target so we can collect it
    CREATE EVENT SESSION [query_trace_column_values] ON SERVER 
    ADD EVENT sqlserver.query_trace_column_values
    ADD TARGET package0.ring_buffer( SET max_memory = 2048 )
    WITH ( MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 30 SECONDS, MAX_EVENT_SIZE = 0 KB, MEMORY_PARTITION_MODE = NONE, TRACK_CAUSALITY = OFF , STARTUP_STATE = OFF )
    GO
    
    -- Start the session
    ALTER EVENT SESSION [query_trace_column_values] ON SERVER
    STATE = START;
    GO
    
    -- Run the query, including traceflag
    DBCC TRACEON(2486);
    SET STATISTICS XML ON;
    GO
    
    -- Original query
    ;with cte(guid,other) as (
      select newid(),1 union all
      select newid(),2 union all
      select newid(),3)
    select a.guid, a.other, b.guid guidb, b.other otherb
    from cte a
    cross join cte b
    order by a.other, b.other
    option ( recompile )
    go
    
    SET STATISTICS XML OFF;
    DBCC TRACEOFF(2486);
    GO
    
    DECLARE @target_data XML
    
    SELECT @target_data = CAST( target_data AS XML )
    FROM sys.dm_xe_sessions AS s 
        INNER JOIN sys.dm_xe_session_targets AS t ON t.event_session_address = s.address
    WHERE s.name = 'query_trace_column_values'
    
    
    --SELECT @target_data td
    
    -- Arbitrarily fish out 3 unique guids from intermediate stage of the query as collected by XEvent session
    ;WITH cte AS
    (
    SELECT
        n.c.value('(data[@name = "row_id"]/value/text())[1]', 'int') row_id,
        n.c.value('(data[@name = "column_value"]/value/text())[1]', 'char(36)') [guid]
    FROM @target_data.nodes('//event[data[@name="column_id"]/value[. = 1]][data[@name="row_number"]/value[. < 4]][data[@name="node_name"]/value[. = "Nested Loops"]]') n(c)
    )
    SELECT *
    FROM cte a
        CROSS JOIN cte b
    GO
    
    -- Stop the session
    ALTER EVENT SESSION [query_trace_column_values] ON SERVER
    STATE = STOP;
    GO
    
    -- Drop the session
    IF EXISTS ( select * from sys.server_event_sessions where name = 'query_trace_column_values' )
    DROP EVENT SESSION [query_trace_column_values] ON SERVER 
    GO
    

    Testado na versão (CTP3.2) - 13.0.900.73 (x64), apenas por diversão.

    • 2
  5. wBob
    2012-10-28T05:35:15+08:002012-10-28T05:35:15+08:00

    Descobri que o traceflag 8649 (plano paralelo de força) induziu esse comportamento para a coluna guid à esquerda em minhas instâncias de 2008, R2 e 2012. Não precisei usar o flag no SQL 2005 onde o CTE se comportou corretamente. Tentei usar o plano gerado no SQL 2005 nas instâncias superiores mas não validava.

    with cte(guid,other) as (
      select newid(),1 union all
      select newid(),2 union all
      select newid(),3)
    select a.guid, a.other, b.guid guidb, b.other otherb
    from cte a
    cross join cte b
    order by a.other, b.other
    option ( querytraceon 8649 )
    

    Usando a dica, usando um guia de plano incluindo a dica ou usando o plano gerado pela consulta com a dica em um USE PLAN etc, tudo funcionou. CTE newid

    • 1

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

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

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

    Como selecionar a primeira linha de cada grupo?

    • 6 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +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