любителям оптимизировать под 11g

Begin ner
Дата: 16.09.2015 16:57:37
есть некоторая таблица testtable, в данной таблице есть несколько столбцов. есть единственный индекс по одному из столбцов. всего в таблице хранится 10 строк и статистика по таблице собрана. есть запрос (самый простой без каких-либо хинтов), выбирающий все столбцы из testtable, с каким-то условием в where по столбцу, на котором есть индекс. кто-нибудь сможет привести пример данных в таблице testtable и условия в where, чтобы вместо фулскана использовался бы индекс по столбцу? т.е. привести пример данных, на которых неправильно считалась бы кардинальность? версия оракла: 11.2. натолкнула меня на данный вопрос все та же книжка от Льюса...
ArtNick
Дата: 16.09.2015 17:13:49
Begin ner
кто-нибудь сможет привести пример данных в таблице testtable и условия в where, чтобы вместо фулскана использовался бы индекс по столбцу?

Ну так навскидку, таблица покупок, в ней есть индексированное поле клиент , запрос выборки всех покупок клиента. Этот запрос прямо таки обязан использовать индекс....
Begin ner
Дата: 16.09.2015 17:19:45
ArtNick
Begin ner
кто-нибудь сможет привести пример данных в таблице testtable и условия в where, чтобы вместо фулскана использовался бы индекс по столбцу?

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

я же написал, что в таблице 10 строк. и потом не надо навскидку, давай конкретный пример!
Sayan Malakshinov
Дата: 16.09.2015 17:21:27
Begin ner,

печально ты книжку читаешь...
dbms_photoshop
Дата: 16.09.2015 17:28:13
Begin ner,

Читай до полного просветления все статьи "Indexes And Small tables".
Если после прочтения понимание не прийдет - спросишь тогда еще раз.
ArtNick
Дата: 16.09.2015 17:40:10
Begin ner,
Я пожалуй воздержусь, а тебе дам подсказку: уникальный индекс.
ProgMann
Дата: 17.09.2015 00:07:22
Begin ner
всего в таблице хранится 10 строк и статистика по таблице собрана

Нормальный стоимостной оптимизатор не станет юзать индекс,
т.к. все данные таблицы лежат в одном блоке базы, скорее всего
Меньше блока база все равно не может прочитать .................
dbms_photoshop
Дата: 17.09.2015 00:14:06
ProgMann,

Ты забыл что оптимизатор помимо IO еще учитывает CPU.
Так что с твоими "умозаключениями" - это на ПТ.
кит северных морей
Дата: 17.09.2015 00:28:59
ProgMann
все данные таблицы лежат в одном блоке базы


17:26:41 SQL> create table dropme$1block compress as select * from dual;

Table created.

Elapsed: 00:00:03.14
17:27:03 SQL> select blocks from dba_extents where segment_name = 'DROPME$1BLOCK';

    BLOCKS
----------
         6

Elapsed: 00:00:02.21

ну да, в одном. в каком именно?
Begin ner
Дата: 17.09.2015 10:05:48
dbms_photoshop
Begin ner,

Читай до полного просветления все статьи "Indexes And Small tables".
Если после прочтения понимание не прийдет - спросишь тогда еще раз.

Лучший способ выбрать одну строку из маленькой таблицы?.. спасибо как-нибудь прочту. собственно все ушли от того вопроса, который меня изначально интересовал, куда-то в сторону. меня интересовали именно ДАННЫЕ в таблице, на которых будет неправильно считаться кардинальность и оптимизатор (ошибочно) вместо полного сканирования таблицы будет использовать доступ по индексу. вот Льюс в своей книжке такие данные неоднократно приводит, но это все было до 11g. я прошу пример данных под 11g