Enquanto você pode usar uma função escalar como SUPERIOR ou INFERIOR e você pode re-ordenar a coluna de modo que ele não é mais sensível a maiúsculas, estas abordagens requerem conversão de dados ser feito em relação aos dados de base que nunca permitem uma busca de índice. Você também está liderando seu LIKE com um curinga, portanto, isso não é uma preocupação muito importante para você nesse cenário, mas se você quiser pesquisar a parte esquerda de uma string de maneira eficiente E permitir o otimizador para procurar por um índice, você pode especificar sua string com colchetes ([]) da seguinte maneira:
SELECT *
FROM TABLE
WHERE Name LIKE '[hH][oO][sS][pP][iI][tT][aA][lL][iI][sS][tT]%'
Este exemplo ( link dbfiddle aqui ) mostra melhor o que quero dizer:
CREATE TABLE #tmp_cohellation_fun
(
ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
, myValue VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CS_AS
)
-- Garbage values to represent data you don't want
INSERT INTO #tmp_cohellation_fun
SELECT CAST(NEWID() AS VARCHAR(50))
FROM master.sys.configurations t1
CROSS JOIN master.sys.configurations t2
CROSS JOIN master.sys.configurations t3;
-- Sprinkle a little bit of good data
INSERT INTO #tmp_cohellation_fun
(myValue)
VALUES ('Apple')
, ('apple')
-- Another healthy helping of garbage that we don't care about
INSERT INTO #tmp_cohellation_fun
SELECT CAST(NEWID() AS VARCHAR(50))
FROM master.sys.configurations t1
CROSS JOIN master.sys.configurations t2
CROSS JOIN master.sys.configurations t3;
-- Some more good data
INSERT INTO #tmp_cohellation_fun
(myValue)
VALUES
('aPple')
, ('APPLE')
, ('APple')
-- Final insert of garbage that we don't care about
INSERT INTO #tmp_cohellation_fun
SELECT CAST(NEWID() AS VARCHAR(50))
FROM master.sys.configurations t1
CROSS JOIN master.sys.configurations t2
CROSS JOIN master.sys.configurations t3
;
-- Create a nonclustered rowstore index
CREATE INDEX ix_myValue ON #tmp_cohellation_fun (myValue)
;
SET STATISTICS XML ON
;
-- Seek, but incorrect results
SELECT *
FROM #tmp_cohellation_fun
WHERE myValue LIKE 'apple%'
;
-- Scan, with correct results
SELECT *
FROM #tmp_cohellation_fun
WHERE myValue COLLATE SQL_Latin1_General_CP1_CI_AS LIKE 'apple%'
;
-- Seek, with correct results
SELECT *
FROM #tmp_cohellation_fun
WHERE myValue LIKE '[aA][pP][pP][lL][eE]%'
;
SET STATISTICS XML OFF
;
DROP TABLE IF EXISTS #tmp_cohellation_fun
select
tempo. Você pode fazer isso criando uma nova coluna com um subconjunto dos dados transformados e depois indexá-los, normalmente durante os momentos em que você executaria o ETL. Isso teria um custo de manutenção e não é um ótimo método. B) Você pode tornar a pesquisa de consulta discutível ou sargável. Alterar a consulta para serSELECT * FROM TABLE WHERE VALUE LIKE %hospitalist
ouSELECT * FROM TABLE WHERE VALUE LIKE hospitalist%
funcionaria. Além disso, você está olhando para hardware ou recursos para aumentar a velocidade de um design ruim.