Estou olhando para o plano de consulta no SQL Server Mgmt Studio e vejo algo assim:
(@P0 nvarchar(4000), @P1 nvarchar(4000)) Update...
O que significa o tipo ao lado dos parâmetros? Para este exemplo, vamos supor que a coluna para esses parâmetros seja, na verdade, varchar(64)
. É assim que os parâmetros estão sendo vinculados em tempo de execução?
EDITAR
Este é um aplicativo Java EE usando provedores JDBC 3.0 ou 4.0. Basicamente, temos um arquivo de propriedades cheio de instruções SQL como esta:
mySqlStatementFoo = UPDATE Schema.Table.Column set column = 1 WHERE objectID = ?
Parece que, no passado, se houvesse uma incompatibilidade de ligação, lançaríamos o parâmetro assim:
Where objectID = CAST(? AS VARCHAR(36))
Suponho que eles escolheram fazer dessa maneira, pois oferecemos suporte a vários bancos de dados. IE DB2 e Oracle. Eu não vi o Java real, mas suspeito que eles estão apenas selecionando a instrução do arquivo e enviando-a pela rede. Estou fazendo testes de carga e vendo que estamos fazendo varreduras de tabela e suspeito que o otimizador não está usando o índice correto porque os parâmetros estão sendo vinculados incorretamente.