O termo "sargável" foi introduzido pela primeira vez por P. Griffiths Selinger et al. em seu artigo de 1979 "Seleção de caminho de acesso em um sistema de gerenciamento de banco de dados relacional", publicado pela ACM . Para não membros do ACM, há uma cópia desse documento em http://cs.stanford.edu/people/chrismre/cs345/rl/selinger.pdf
O termo é definido neste parágrafo:
As varreduras de índice e segmento 1 podem, opcionalmente, receber um conjunto de predicados, chamados argumentos de pesquisa (ou SARGS), que são aplicados a uma tupla antes de retornar ao chamador RSI 2 . Se a tupla satisfizer os predicados, ela será retornada; caso contrário, a verificação continuará até encontrar uma tupla que satisfaça o SARGS ou esgotar o segmento ou o intervalo de valores de índice especificado. Isso reduz os custos, eliminando a sobrecarga de fazer chamadas RSI para tuplas, que podem ser rejeitadas com eficiência no RSS. Nem todos os predicados têm a forma que pode se tornar SARGS. Um predicado sargável é aquele da forma (ou que pode ser colocada na forma) "valor de operador de comparação de colunas". SARGS são expressos como uma expressão booleana de tais predicados na forma normal disjuntiva.
Em outras palavras, um predicado sargável é aquele que pode ser resolvido pelo mecanismo de armazenamento (método de acesso) observando diretamente a tabela ou o registro do índice. Um predicado não sargável, por outro lado, requer um nível mais alto do DBMS para executar uma ação. Por exemplo, o resultado de WHERE lastname = 'Doe'
pode ser decidido pelo mecanismo de armazenamento simplesmente olhando o conteúdo do campo lastname
de cada registro. Por outro lado, WHERE UPPER(lastname) = 'DOE'
requer a execução de uma função pelo mecanismo SQL, o que significa que o mecanismo de armazenamento precisará retornar todas as linhas que lê (desde que correspondam a outros possíveis predicados sargáveis) de volta ao mecanismo SQL para avaliação, incorrendo em custos adicionais de CPU .
Você pode ver na definição original que predicados sargáveis podem ser aplicados não apenas às varreduras de índice, mas também às varreduras de tabela (segmento na terminologia do System R), desde que as condições "valor de comparação de operador de coluna" sejam atendidas e, portanto, possam ser avaliado pelo mecanismo de armazenamento. Este é realmente o caso do Db2, um descendente do Sistema R de várias maneiras :
Os predicados sargáveis do índice não são usados para agrupar uma pesquisa, mas são avaliados a partir do índice, se um for escolhido, porque as colunas envolvidas no predicado fazem parte da chave do índice. Esses predicados também são avaliados pelo gerenciador de índices.
Os predicados sargáveis de dados são predicados que não podem ser avaliados pelo gerenciador de índices, mas podem ser avaliados pelo Data Management Services (DMS). Normalmente, esses predicados requerem o acesso de linhas individuais a partir de uma tabela base. Se necessário, o DMS recuperará as colunas necessárias para avaliar o predicado,
O fato de que nos predicados sargáveis de fala do SQL Server são apenas aqueles que podem ser resolvidos usando pesquisas de índice é provavelmente determinado pela incapacidade de seu mecanismo de armazenamento de aplicar esses predicados durante as verificações de tabela.
Os predicados sargáveis e não-sargáveis às vezes são descritos como predicados "estágio 1" e "estágio 2", respectivamente (isso também vem da terminologia Db2 ). Os predicados do estágio 1 podem ser avaliados no nível mais baixo do processamento de consultas, ao ler registros de tabela ou índice. Linhas que correspondem às condições do estágio 1, se houver, são enviadas para o próximo nível, estágio 2, de avaliação.
1 - Segmento no Sistema R é o armazenamento físico das tuplas de uma tabela; uma varredura de segmento é um pouco equivalente a uma varredura de tabela em outros DBMSes.
2 - RSI - RSS 3 Interface, uma interface de consulta orientada a tuplas. A função de interface relevante para esta discussão é NEXT, que retorna a próxima linha correspondente aos predicados de consulta.
3 - RSS, ou Research Storage System, o subsistema de armazenamento do Sistema R.