проблема производительности оракула 10 с Select * от - PullRequest
2 голосов
/ 08 июля 2010

sql: select * from user_info where userid='1100907' and status='1'

ИД пользователя проиндексирован, таблица содержит менее 10000 строк и имеет столбец больших объектов.

sql занимает 1 секунду (я получил это с помощью «установить синхронизацию» в sqlplus).Я пытался использовать все имена столбцов, чтобы заменить *, но все еще 1 секунду.После того, как я удалил столбец LOB, sql занимает 0,99 секунды.Когда я уменьшил число столбцов вдвое, время также сократилось вдвое.

Наконец, select userid from user_info where userid='1100907' and status='1' занимает 0,01 секунды.

Может кто-нибудь это выяснить?

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Помните, что «тестирование производительности настенных часов» ненадежно.Он зависит от внешних условий базы данных и - при выводе в SQL * Plus - зависит от того, сколько времени требуется для физического отображения данных.Это может объяснить, почему выбор половины столбцов действительно оказывает такое существенное влияние на прошедшее время.Сколько столбцов в этой таблице?

Настройка начинается с EXPLAIN PLAN.Этот инструмент покажет вам, как база данных выполнит ваш запрос. Узнайте больше .

Например, этот запрос быстрее обслуживать

select userid from user_info

, чем этот

select * from user_info

, поскольку база данных может удовлетворить первый запрос информацией из индексапо идентификатору пользователя, вообще не касаясь стола.

edit

"Можете ли вы сказать мне, почему sqlplus печатает имена столбцов много раз, кроме простого возврата результата"

Это связано с подкачкой.SQL Plus повторяет заголовки столбцов каждый раз, когда создает страницу.Вы можете подавить это поведение с помощью одной из следующих команд SQL Plus:

set heading off

или

set pages n  

Во втором случае сделать n очень большим(например, 2000) или ноль.

0 голосов
/ 08 июля 2010

Возможно, у вас есть 100 столбцов в таблице user_info? Если да, сколько из этих столбцов вам действительно нужно в запросе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...