Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / mat view / 22 сообщений из 22, страница 1 из 1
03.10.2016, 08:45:19
    #39319381
Cydia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
все привет, собсна кто может помочь или подсказать каким образом можно избавиться от фулл скана в мат вью?

Код: 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
03.10.2016, 10:07:30
    #39319434
Alex__kK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Cydia,

Ты думаешь тебе возможно что-то дельное подсказать только по плану, что ты выложил?
Вангую... построить индекс.
...
Рейтинг: 0 / 0
03.10.2016, 11:40:16
    #39319501
Cydia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
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
03.10.2016, 11:42:45
    #39319502
Cydia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Alex__kK,
а вот сама мат вьющка
create materialized view MV_STAT
refresh fast on commit
as
select ID, '% '||UPPER(LONGNAME)||' %' as NAME4LIKE from names;
...
Рейтинг: 0 / 0
03.10.2016, 12:13:48
    #39319523
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
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
03.10.2016, 12:25:06
    #39319533
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Avotge, оператор like не транзитивен.
ТС, есть ли в поле LONGNAME из names символы '_' и '%'? Какова логика параметра "&B1" и поля LONGNAME?
...
Рейтинг: 0 / 0
03.10.2016, 12:39:40
    #39319546
Opus Magnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Лично для меня немного странно хранить % в поле имени.
Также, думаю, индекс не сработает в случае, если с обеих сторон в LIKE стоит %.
...
Рейтинг: 0 / 0
03.10.2016, 12:41:14
    #39319548
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Не понятноAvotge, оператор like не транзитивен.
Да все тут и ежу понятно ) Ну не будет же работать индекс если в Like '%' в самом начале, а он здесь в самом начале (или я что-то пропустил в школе )).
Т.е. ТС похоже хочет сначала по лайку имени отобрать ID-шники, а потом по ним достать записи, но делает все имхо с полным не пониманием сути поиска по Like как минимум. Да и нужна ли вообще такая матвью.
...
Рейтинг: 0 / 0
03.10.2016, 12:45:25
    #39319555
Opus Magnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Avotge,

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

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

ну тогда помогите решить этот вопрос)
...
Рейтинг: 0 / 0
03.10.2016, 15:51:15
    #39319740
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
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
03.10.2016, 17:22:28
    #39319829
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
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
03.10.2016, 20:34:15
    #39319919
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
ORA__SQL
Код: plsql
1.
...ize=3293 card=89)


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

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

ни в одном из приведенных примеров индекс не подхватился.
...
Рейтинг: 0 / 0
04.10.2016, 08:08:45
    #39320031
Cydia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
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
04.10.2016, 08:34:07
    #39320040
Не понятно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mat view
Cydia,

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

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

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


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