У нас есть таблица, в которой хранится информация о пользователе в парах имени и значении атрибута. В этой таблице мы создали представление путем переноса строк в столбцы с использованием декодирования. MAX(DECODE(attribute_name,'FirstName',attribute_Value)) FirstName
Создание указателя на функции максимального декодирования
CREATE OR REPLACE FORCE VIEW vw_get_userinfo
("USER_ID", "FIRSTNAME", "LASTNAME", "USEREMAIL",
"STREET", "CITY", "STATE", "ZIPCODE", "COUNTRY")
AS
SELECT
t.user_id,
t.firstname,
t.lastname,
t.useremail,
t.street,
t.city,
t.state,
t.country
FROM (WITH
tempattributes AS (SELECT
user_id,
attribute_name,
attribute_value
FROM user_details)
SELECT
user_id,
MAX(DECODE(attribute_name, 'FirstName', attribute_value)) FirstName,
MAX(DECODE(attribute_name, 'LastName', attribute_value)) LastName,
MAX(DECODE(attribute_name, 'UserEmail', attribute_value)) UserEmail,
MAX(DECODE(attribute_name, 'Street', attribute_value)) Street,
MAX(DECODE(attribute_name, 'City', attribute_value)) City,
MAX(DECODE(attribute_name, 'State', attribute_value)) State,
MAX(DECODE(attribute_name, 'ZipCode', attribute_value)) Zipcode,
MAX(DECODE(attribute_name, 'Country', attribute_value)) Country
FROM tempattributes
GROUP BY user_id
) t
Во время объяснения плана, полное сканирование выполняется при запросе с первым полем имени. Функциональный индекс не применим в этом случае, поскольку индекс не будет работать в группе по функциям. Есть ли способ создать индекс в атрибуте FirstName
?
Любая помощь будет оценена по достоинству.
Если вам нужны рекомендации по эффективности, вы должны показать весь запрос. –
Спасибо @ GordonLinoff. Я включил запрос. –
Я не вижу предиката фильтра в запросе. Вы проецируете все строки из таблицы. Очевидно, требуется «полное сканирование таблицы». Когда вы фильтруете данные на основе «столбца», имеет смысл создать «индекс» в этом столбце. Если вы фильтруете данные на основе «выражения», тогда вам нужно создать «функциональный индекс» в этом столбце. Вам не нужен индекс для проецирования строк. Опубликуйте ** ПРОГРАММНЫЙ ПЛАН **. См. [Как создать и отобразить EXPLAIN PLAN] (http://lalitkumarb.com/2014/05/31/oracle-explain-plan/) –