2015-07-15 4 views
0

У меня проблема с запросом в Oracle; есть таблица DIT_NUMBERS_ASIG, когда я выполнить запрос следующим образом:медленный запрос с использованием JDBC, Oracle 11g

SELECT * 
FROM DIT_NUMBERS_ASIG 
WHERE number_asig = '1234567'; //Quotes 

запрос выполняется немедленно; но если я выполню этот запрос:

SELECT * 
FROM DIT_NUMBERS_ASIG 
WHERE number_asig = 1234567; //Without Quotes 

Запрос медленный, это занимает около 2 минут.

Проблема заключается в том, когда я пытаюсь выполнить это заявление из приложения Java (с использованием JDBC):

SELECT * 
FROM DIT_NUMBERS_ASIG 
WHERE number_asig = '1234567'; 

Запрос медленно, как если котировки не существует.

Как я могу сделать для выполнения запроса, но с кавычками, так, как если запрос не имел котировки

+0

Вы оставили важную информацию: что происходит во время вызова JDBC при выполнении запроса без кавычек? –

+3

Какой тип столбца 'number_asig' в вашей базе данных? –

+0

Можете ли вы опубликовать таблицу DDL –

ответ

0

Я действительно не вижу большой разницы при выполнении запроса, как вы упомянули о SQLFiddle. Я добавил несколько строк в одну таблицу и попытался получить определенную строку, передав значение, как вы упомянули выше (с цитатой и без цитаты). Я не вижу никакой разницы.

SQL Fiddle Demo

Возможное решение:.

  1. Рассмотрите возможность добавления индекса в таблицу.
  2. Укажите имя столбца вместо простого использования * в своем заявлении SELECT.

Вы также можете рассмотреть возможность проверки Oracle Doc для SQL Tuning.

+1

Там _is_ большая разница. '' 1234567'' является строковой константой '1234567' является числом. В зависимости от типа столбца Oracle может не использовать индекс в этом столбце, если значение сравнения имеет неправильный тип. –

+0

@a_horse_with_no_name Я сказал от имени результата, показанного в sqlfiddle. Поскольку у меня нет никаких других доказательств :) – Ravi

Смежные вопросы