У меня тут есть пример, в котором оптимизатор не использует индекс для злополучной вьюхи:
Вьюха: CREATE VIEW "UndeletableRssFeedItems"( "Id", "FeedId", "Title", "Link", "Description", "Author", "Comments", "Guid", "PubDate", "SourceUrl", "SourceValue", "Hash", "Deprecated", "Hidden", "EnclosureUrl", "EnclosureLength", "EnclosureType") AS SELECT I."Id", I."FeedId", I."Title", I."Link", I."Description", I."Author", I."Comments", I."Guid", I."PubDate", I."SourceUrl", I."SourceValue", I."Hash", I."Deprecated", I."Hidden", COALESCE(E."Url", ''), COALESCE(E."Length", 0), COALESCE(E."Type", '') FROM "RssFeedItems" I LEFT JOIN (SELECT MIN(RDB$DB_KEY) AS ENCLOSURE_KEY, "FeedItemId" FROM "RssFeedItemEnclosures" GROUP BY "FeedItemId") AS EN ON EN."FeedItemId" = I."Id" LEFT JOIN "RssFeedItemEnclosures" E ON E.RDB$DB_KEY = EN.ENCLOSURE_KEY; 2) Тормозящий запрос (по таблице RssFeedItems, которая внутри вьюхи, идёт натуральный скан): SELECT RFI."Id", RFI."FeedId", RFI."Title", RFI."Link", RFI."Description", RFI."Author", RFI."Comments", RFI."Guid", RFI."PubDate", RFI."SourceUrl", RFI."SourceValue", RFI."Hash", RCE."Type" FROM "UndeletableRssFeedItems" RFI JOIN "RssCacheElements" RCE ON RFI."FeedId" = RCE."RssFeedId" WHERE RCE."FeedDefinitionId" = 1540 PLAN JOIN (JOIN (JOIN (RFI I NATURAL, RFI EN RssFeedItemEnclosures ORDER FK_RssFeedItemEnclosures_1 INDEX (FK_RssFeedItemEnclosures_1)), RFI E INDEX ()), RCE INDEX (FK_RssCacheElements_1, FK_RSSCACHEELEMENTS_0)) 3) Запрос с таблицей вместо представления быстрый: SELECT RFI."Id", RFI."FeedId", RFI."Title", RFI."Link", RFI."Description", RFI."Author", RFI."Comments", RFI."Guid", RFI."PubDate", RFI."SourceUrl", RFI."SourceValue", RFI."Hash", RCE."Type" FROM "RssFeedItems" RFI JOIN "RssCacheElements" RCE ON RFI."FeedId" = RCE."RssFeedId" WHERE RCE."FeedDefinitionId" = 1540 PLAN JOIN (RCE INDEX (FK_RSSCACHEELEMENTS_0), RFI INDEX (RssFeedItems_IDX2)) 4) Простой запрос, на котором для вьюхи оптимизатор использует индекс по "FeedId" SELECT RFI."Id", RFI."FeedId", RFI."Title", RFI."Link", RFI."Description", RFI."Author", RFI."Comments", RFI."Guid", RFI."PubDate", RFI."SourceUrl", RFI."SourceValue", RFI."EnclosureUrl", RFI."EnclosureLength", RFI."EnclosureType" FROM "UndeletableRssFeedItems" RFI WHERE RFI."FeedId" = 743 PLAN JOIN (JOIN (RFI I INDEX (RssFeedItems_IDX2), RFI EN RssFeedItemEnclosures ORDER FK_RssFeedItemEnclosures_1 INDEX (FK_RssFeedItemEnclosures_1)), RFI E INDEX ()) 5) Переделанный запрос (2), который летает: SELECT RFI."Id", RFI."FeedId", RFI."Title", RFI."Link", RFI."Description", RFI."Author", RFI."Comments", RFI."Guid", RFI."PubDate", RFI."SourceUrl", RFI."SourceValue", RFI."Hash", RCE."Type" FROM "UndeletableRssFeedItems" RFI RIGHT JOIN "RssCacheElements" RCE ON RFI."FeedId" = RCE."RssFeedId" WHERE RCE."FeedDefinitionId" = 1540 AND RFI."Id" IS NOT NULL PLAN JOIN (RCE INDEX (FK_RSSCACHEELEMENTS_0), JOIN (JOIN (RFI I INDEX (RssFeedItems_IDX2), RFI EN RssFeedItemEnclosures ORDER FK_RssFeedItemEnclosures_1 INDEX (FK_RssFeedItemEnclosures_1)), RFI E INDEX ())) Если интересно, могу выслать тестовую базу.

