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

richardtallent's questions

Martin Hope
richardtallent
Asked: 2016-07-22 11:14:35 +0800 CST

Como posso executar uma chamada CONTAINS de texto completo em uma lista de frases?

  • 2

Eu tenho uma lista de palavras/frases em uma tabela phrases. Eu tenho outra tabela com um catálogo de texto completo indexando a descriptioncoluna.

Quero preencher uma tabela resultscom um registro para cada frase, e a quantidade de vezes que essa frase foi encontrada na descrição:

INSERT INTO results(phrase, foundcount)
SELECT  phrase, 
    (SELECT COUNT(*) FROM table WHERE CONTAINS(table.description, phrase))
FROM    phrases;

Não importa o quanto eu tente, isso resulta no erro:

Incorrect syntax near `phrase`. Expecting STRING, TEX_LEX, or VARIABLE

Eu realmente prefiro não usar um cursor apenas para poder atribuir cada phraseum a uma variável. Essa é realmente a única opção?

sql-server sql-server-2008-r2
  • 2 respostas
  • 915 Views
Martin Hope
richardtallent
Asked: 2015-01-29 15:48:14 +0800 CST

Posso otimizar uma junção esquerda para uma única correspondência? [duplicado]

  • 1
Essa pergunta já tem resposta aqui :
É possível impor valores exclusivos em uma coluna, excluindo nulos? (1 resposta)
Fechado há 7 anos .

Considere uma junção A LEFT JOIN B ON A.id = B.a_id:

  • B.a_idé anulável -- a maioria, mas nem todos os Bregistros apontam para um Aregistro.
  • Apode, no máximo , ter apenas um registro correspondente B(lógica de negócios).
  • Nem todos os Aregistros têm uma correspondência em B.

Existe uma maneira de dizer ao MSSQL que nunca haverá mais de uma correspondência A: B, permitindo assim que ele crie um atalho para a junção assim que uma correspondência for encontrada para um determinado Aregistro?

Eu pensaria que tal otimização poderia acontecer se B.a_idtivesse um índice único, mas isso não é possível, pois é anulável.

Complicando o problema: A e B estão em bancos de dados diferentes (mesma instância do MSSQL).

Se for importante, estou usando o SQL Server 2008 R2.

sql-server join
  • 1 respostas
  • 118 Views
Martin Hope
richardtallent
Asked: 2015-01-29 15:22:36 +0800 CST

Devo usar varchar(max) ou varchar(4000) SPARSE?

  • 3

Eu tenho uma coluna do tipo "comentário" que raramente é usada - cerca de 6% não nula em uma população de 3 milhões de registros. O comprimento médio (quando usado) é de 6 caracteres e o máximo até agora é de cerca de 3 KB. Um máximo de 4000 caracteres é razoável para este campo. Eu tenho duas opções:

comments varchar(max) NULL -- this is the current column definition
comments varchar(4000) SPARSE NULL

Meu entendimento atual é que, em ambos os casos, um NULLvalor não exigiria armazenamento - apenas o NULLconjunto de bits da coluna e um comprimento 0nos metadados da linha.

Mas para os casos não nulos , um tem clara vantagem sobre o outro?

O ponteiro extra de 4 bytes para colunas esparsas com valores sugere que eles são sempre armazenados fora da linha ou em campos textmuito grandes . varchar(max)É esse o caso?

Nesse caso, eu me inclinaria a usar varchar(max), já que ele só armazena valores fora da linha se o comprimento total da linha exceder 8 KB, e a maioria dos meus valores é curta e é improvável que coloque uma linha acima do limite.

Não vi essa situação específica abordada no BOL, então espero que alguém aqui saiba o suficiente sobre as entranhas do MSSQL para fornecer algumas dicas.

(Se for importante, atualmente estou usando 2008R2, mas espero atualizar em breve para 2014.)

sql-server varchar
  • 2 respostas
  • 5211 Views
Martin Hope
richardtallent
Asked: 2015-01-25 19:44:17 +0800 CST

Posso usar SPARSE de alguma forma em uma coluna de bit não anulável com valores principalmente falsos?

  • 1

Tenho uma tabela que armazena os resultados das consultas que são executadas pelo menos uma vez ao dia. Há uma bitcoluna que representa se a linha é da execução mais recente de uma consulta específica com um conjunto específico de argumentos. (Sim, é uma dependência funcional, mas uma desnormalização necessária para o desempenho, já que a maioria das consultas nesta tabela está interessada apenas no resultado mais recente.)

Como essa bitcoluna é quase sempre um valor falso, estou procurando a melhor maneira de ajustar as consultas retornando apenas os valores verdadeiros. O particionamento não é uma opção (Edição Standard). Parece que tornar a coluna SPARSE seria uma solução interessante, mas acredito que isso exigiria que eu alterasse a coluna para anulável e usasse NULL em vez de 0 para valores falsos. Parece um pouco kludgy.

Existe uma opção semelhante ao SPARSE que otimizaria o espaço/desempenho para uma coluna de bit não nula com a maioria (bem mais de 99%) de valores falsos?

O artigo de Pinal Dave indica que os valores zero e nulo são otimizados, mas isso não parece certo para mim, pois são valores diferentes - a menos que o MSSQL esteja usando o mesmo mecanismo para colunas não nulas para indicar o valor padrão. Isso seria ótimo se fosse verdade, mas o BOL não menciona isso.

sql-server performance
  • 1 respostas
  • 97 Views
Martin Hope
richardtallent
Asked: 2011-11-16 23:23:13 +0800 CST

Como posso representar com eficiência a herança em uma árvore?

  • 5

Eu tenho um banco de dados com três "níveis" de objetos: A, Be C. A tabela Atem cerca de 100.000 linhas, Btem 500.000 e Ctem 2 milhões.

Em um ataque de estupidez, projetei o banco de dados para usar tabelas de junção ABe BC, embora sejam 1:me poderiam ter sido representados como um ParentAatributo em Be um ParentBatributo em C. Fiz isso porque pensei na época que esses poderiam ser m:m.

Agora, também tenho uma tabela Dque tem relacionamento am:m com C. Para simplificar o gerenciamento de dados para os usuários, faz sentido permitir que eles se relacionem Dou A, Bem vez de diretamente, cada um deles C.

Então, eu tenho tabelas DAde junção , DBe DC, e uma visão de junção DC2que inclui DC, bem como as DCrelações herdadas das junções de DA-AB-BCe DB-BC. Eu uso um UNION ALL para isso e há alguma lógica de negócios para impedir que os usuários atribuam o mesmo Dregistro em dois níveis.

O problema é que o desempenho de DC2kinda suga. Todas as outras tabelas têm índices de cobertura apropriados para essas junções e os índices de cobertura são agrupados. DC2 não inclui tabelas A, B, Cou D, apenas as tabelas de união.

Há também as tabelas E, F, G e H que são semelhantes a D em como se relacionam com A, B e C.

Quais são algumas estratégias que posso usar para melhorar o desempenho desses relacionamentos herdados?

Já pensou:

  • Criar DC2uma exibição indexada não é uma opção, pois UNION não é permitido em uma exibição indexada no MSSQL.
  • Eu poderia fazer do DC2 uma tabela e gerenciá-lo com gatilhos, mas isso seria uma dor de cabeça e ainda tenho que lidar com EC2, FC2 etc. não consigo onde
  • Mudar AB e BC em atributos de B e C pode, na verdade, desacelerar as coisas, já que as tabelas de junção são mais leves e as tabelas principais não são unidas a DC2 com frequência.
sql-server-2005 hierarchy
  • 1 respostas
  • 275 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