Entenda seus requisitos antes de projetar o esquema (se possível).
Aprenda sobre os dados, 1) indexação 2) tipo de armazenamento usado, 3) mecanismo ou recursos do fornecedor; ou seja, ... armazenamento em cache, recursos na memória 4) tipos de dados 5) tamanho da tabela 6) frequência da consulta 7) cargas de trabalho relacionadas se o recurso for compartilhado 8) teste
A) Os requisitos variam. Se o hardware não suportar a carga de trabalho esperada, você deverá reavaliar como fornecer os requisitos na carga de trabalho. Em relação à coluna de adição à tabela. Se o banco de dados suportar visualizações, você poderá criar uma exibição indexada (?) Dos dados específicos com as colunas nomeadas específicas (vs. selecione '*'). Revise periodicamente seus dados e esquema para garantir que você nunca tenha a síndrome "Garbage-in" -> "Garbage-out".
Supondo que não há outra solução; você pode levar o seguinte em consideração. Sempre existem várias soluções para um problema.
1) Indexação: A seleção * executará um scan de tabelas. Dependendo de vários fatores, isso pode envolver uma busca e / ou contenção de disco com outras consultas. Se a tabela for multiuso, verifique se todas as consultas têm bom desempenho e são executadas abaixo do tempo previsto. Se houver uma grande quantidade de dados e sua rede ou outro recurso não estiver ajustado; você precisa levar isso em conta. O banco de dados é um ambiente compartilhado.
2) tipo de armazenamento. Ou seja: se você estiver usando SSD, disco ou memória. Os tempos de E / S e a carga no sistema / CPU variam.
3) O DBA pode ajustar o banco de dados / tabelas para obter melhor desempenho? Assumindo por qualquer motivo, as equipes decidiram que o '*' selecionado é a melhor solução para o problema; o banco de dados ou a tabela pode ser carregado na memória. (Ou outro método ... talvez a resposta tenha sido projetada para responder com um atraso de 2-3 segundos? --- enquanto um anúncio é exibido para gerar receita da empresa ...)
4) Comece na linha de base. Entenda seus tipos de dados e como os resultados serão apresentados. Tipos de dados menores, número de campos reduz a quantidade de dados retornados no conjunto de resultados. Isso deixa os recursos disponíveis para outras necessidades do sistema. Os recursos do sistema geralmente têm um limite; 'sempre' trabalhe abaixo desses limites para garantir estabilidade e comportamento previsível.
5) tamanho da tabela / dados. selecione '*' é comum em pequenas tabelas. Eles geralmente cabem na memória e os tempos de resposta são rápidos. Mais uma vez ... revise seus requisitos. Planeje a fluência de recursos; sempre planeje as atuais e possíveis necessidades futuras.
6) Frequência de consultas / consultas. Esteja ciente de outras cargas de trabalho no sistema. Se essa consulta for disparada a cada segundo, e a tabela for pequena. O conjunto de resultados pode ser projetado para permanecer no cache / memória. No entanto, se a consulta for um processo em lote frequente com Gigabytes / Terabytes de dados ... talvez seja melhor dedicar recursos adicionais para garantir que outras cargas de trabalho não sejam afetadas.
7) Cargas de trabalho relacionadas. Entenda como os recursos são usados. A rede / sistema / banco de dados / tabela / aplicativo é dedicada ou compartilhada? Quem são as partes interessadas? Isso é para produção, desenvolvimento ou controle de qualidade? Esta é uma "solução rápida" temporária. Você já testou o cenário? Você ficará surpreso com quantos problemas podem existir no hardware atual hoje. (Sim, o desempenho é rápido ... mas o design / desempenho ainda está degradado.) O sistema precisa executar 10 mil consultas por segundo versus 5 a 10 consultas por segundo. O servidor de banco de dados é dedicado, ou executa outros aplicativos, monitorando a execução no recurso compartilhado. Alguns aplicativos / idiomas; Os sistemas operacionais consumirão 100% da memória, causando vários sintomas / problemas.
8) Teste: teste suas teorias e entenda o máximo que puder. Seu problema de seleção '*' pode ser um grande problema ou pode ser algo que você nem precisa se preocupar.
SELECT COUNT(*)
ser mau é incrivelmente velho e desatualizado . Para informações sobreSELECT *
- consulte: stackoverflow.com/questions/1960036/…