powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / mat view
22 сообщений из 22, страница 1 из 1
mat view
    #39319381
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все привет, собсна кто может помочь или подсказать каким образом можно избавиться от фулл скана в мат вью?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Rows (1st) Rows (avg) Rows (max)  Row Source Operation
---------- ---------- ----------  ---------------------------------------------------
         0          0          0  NESTED LOOPS  (cr=247 pr=0 pw=0 time=452174 us cost=5 size=118 card=2)
         0          0          0   NESTED LOOPS  (cr=247 pr=0 pw=0 time=452171 us cost=5 size=118 card=2)
         0          0          2    MAT_VIEW ACCESS FULL MV_STAT (cr=247 pr=0 pw=0 time=445989 us cost=3 size=3293 card=89)
         0          0          0    INDEX RANGE SCAN PK_EXPERIENCE (cr=0 pr=0 pw=0 time=2 us cost=1 size=0 card=1)(object id 66952)
         0          0          0   TABLE ACCESS BY INDEX ROWID EXPERIENCE (cr=0 pr=0 pw=0 time=0 us cost=1 size=22 card=1)

********************************************************************************


query rewrite поможет в этом случаи?
...
Рейтинг: 0 / 0
mat view
    #39319434
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cydia,

Ты думаешь тебе возможно что-то дельное подсказать только по плану, что ты выложил?
Вангую... построить индекс.
...
Рейтинг: 0 / 0
mat view
    #39319501
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,
сам запрос
Код: plsql
1.
2.
3.
SELECT   * FROM 
  EXPERIENCE J, MV_STAT V WHERE J.ID = V.ID AND 
  UPPER(&B1 )  LIKE  V.NAMELIKE; 


пробывал создать индекс на поле NAMELIKE - безрезультатно
...
Рейтинг: 0 / 0
mat view
    #39319502
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,
а вот сама мат вьющка
create materialized view MV_STAT
refresh fast on commit
as
select ID, '% '||UPPER(LONGNAME)||' %' as NAME4LIKE from names;
...
Рейтинг: 0 / 0
mat view
    #39319523
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cydiaпробывал создать индекс на поле NAMELIKE - безрезультатно
Может лучше так?
Код: plsql
1.
2.
3.
4.
5.
SELECT   * 
  FROM EXPERIENCE J, 
           MV_STAT V 
WHERE J.ID = V.ID 
    AND V.NAMELIKE LIKE UPPER(&B1 )


Но с %, судя по вопросу и запросу, может все равно не подхватить индекс )
Да и вообще эта мвью нужна ли.
...
Рейтинг: 0 / 0
mat view
    #39319533
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotge, оператор like не транзитивен.
ТС, есть ли в поле LONGNAME из names символы '_' и '%'? Какова логика параметра "&B1" и поля LONGNAME?
...
Рейтинг: 0 / 0
mat view
    #39319546
Фотография Opus Magnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично для меня немного странно хранить % в поле имени.
Также, думаю, индекс не сработает в случае, если с обеих сторон в LIKE стоит %.
...
Рейтинг: 0 / 0
mat view
    #39319548
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятноAvotge, оператор like не транзитивен.
Да все тут и ежу понятно ) Ну не будет же работать индекс если в Like '%' в самом начале, а он здесь в самом начале (или я что-то пропустил в школе )).
Т.е. ТС похоже хочет сначала по лайку имени отобрать ID-шники, а потом по ним достать записи, но делает все имхо с полным не пониманием сути поиска по Like как минимум. Да и нужна ли вообще такая матвью.
...
Рейтинг: 0 / 0
mat view
    #39319555
Фотография Opus Magnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Avotge,

Если % только в начале, можно еще попробовать REVERSE INDEX.
Мне на практике не доводилось пользоваться, но разве не решит проблему LIKE % с одной стороны?
...
Рейтинг: 0 / 0
mat view
    #39319570
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Opus Magnum,

про план никто и ни слово не сказал)
...
Рейтинг: 0 / 0
mat view
    #39319600
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CydiaOpus Magnum, про план никто и ни слово не сказал)
План у тебя отличный! Где такой достал? Дай попробовать :))
на что ты собсно жалуешься? у тебя идет поиск подходящего шаблона для параметра. Никакой индекс с таким не справится.
Поэтому FULL ACCESS по MV тут обеспечен.
...
Рейтинг: 0 / 0
mat view
    #39319621
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятно,

ну тогда помогите решить этот вопрос)
...
Рейтинг: 0 / 0
mat view
    #39319740
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CydiaНе понятно,
ну тогда помогите решить этот вопрос)
Код: plsql
1.
MAT_VIEW ACCESS FULL MV_STAT (cr=247 pr=0 pw=0 time=445989 us cost=3 size=3293 card=89)
...
Рейтинг: 0 / 0
mat view
    #39319829
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cydiaну тогда помогите решить этот вопрос)
Троллишь либо? )
Объясни по порядку исходную задачу и логику твоих запросов и индексов, особенно с условием Like )
Потом объясни почему ты считаешь, что по твоему запросу должен подхватиться индекс по NAMELIKE, если ты по нему не фильтруешь.
Посмотри на два плана запроса
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE NAMELIKE LIKE 'QWEQW%'


и
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE 'QWEQW%' LIKE NAMELIKE


В первом случае индекс подхватится, во втором (в твоем варианте, скорее, что нет)
Потом возьми этот же первый запрос, но процент поставь впереди
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE NAMELIKE LIKE '%QWEQW'


Потом почитай про SQL книжко, потом про индексы и про реверсивный тоже, потом про like отдельно )
...
Рейтинг: 0 / 0
mat view
    #39319919
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ORA__SQL
Код: plsql
1.
...ize=3293 card=89)


Я в толковании sql-планов не силен.
Но интересно.
Что означает "карта=89"?
...
Рейтинг: 0 / 0
mat view
    #39320003
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понятно,

тоже очень интересно, можете объяснить что значит карт=89?
...
Рейтинг: 0 / 0
mat view
    #39320028
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotge,

ни в одном из приведенных примеров индекс не подхватился.
...
Рейтинг: 0 / 0
mat view
    #39320031
Cydia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AvotgeCydiaну тогда помогите решить этот вопрос)
Троллишь либо? )
Объясни по порядку исходную задачу и логику твоих запросов и индексов, особенно с условием Like )
Потом объясни почему ты считаешь, что по твоему запросу должен подхватиться индекс по NAMELIKE, если ты по нему не фильтруешь.
Посмотри на два плана запроса
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE NAMELIKE LIKE 'QWEQW%'


и
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE 'QWEQW%' LIKE NAMELIKE


В первом случае индекс подхватится, во втором (в твоем варианте, скорее, что нет)
Потом возьми этот же первый запрос, но процент поставь впереди
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE NAMELIKE LIKE '%QWEQW'


Потом почитай про SQL книжко, потом про индексы и про реверсивный тоже, потом про like отдельно )

задача состоит в том что в параметр P мы можем передать не только ФИО, но и текст поэтому структура такая запроса, допустим : '9 ИВАН ходит'
я так понимаю тут ничего не придумать и сделать, будет всегда фулл скан.
Код: plsql
1.
SELECT * FROM MV_STAT V WHERE &P LIKE NAMELIKE
...
Рейтинг: 0 / 0
mat view
    #39320040
Не понятно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cydia,

сначала нужно выяснить, что ты хранишь в поле NAMELIKE, а уже потом, что передаешь в подстановочной переменной.
Которую, кстати, лучше сделать параметром.
Есть у тебя в NAMELIKE символы шаблона кроме первого и последнего '%'?
...
Рейтинг: 0 / 0
mat view
    #39320085
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cydia, может Oracle text спасет отца русской демократии? )
Хотя там с русским не все гладко вроде как.
...
Рейтинг: 0 / 0
mat view
    #39320329
Melkomyagkii_newbi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по ID ничего не отфильтруется? Индекс есть?
...
Рейтинг: 0 / 0
mat view
    #39320359
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CydiaНе понятно,

тоже очень интересно, можете объяснить что значит карт=89?

Ну да, обычно их должно быть не больше 54 :) ТС поизучай как интерпретировать план запроса, card = cardinality.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / mat view
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]