Кіріспе
Деректер қорында ішінара индекс, сонымен қатар сүзгіленген индекс деп аталады, ол кестедегі қатарлардың белгілі бір бөлігін қамтитын шартты қолданатын индекс. Бұл индекске кесте өте үлкен болса және өте жоғары таңдамалылыққа ие болса да, кішкентай болып қалуға мүмкіндік береді. Мысалы, сізде транзакциялар кестесі болса, онда жазбалар STATUS = 'A' (белсенді) күйінен басталады, содан кейін басқа күйлерден ("P" – күтілуде, "W" – жұмыста) өтіп, соңғы күйіне, 'F' жеткеннен кейін оны қайта өңдеудің қажеті болмайды. PostgreSQL жүйесінде пайдалы ішінара индекс келесідей анықталуы мүмкін:
create index partial status on txn table (status)
where status in ('A', 'P', 'W');
Бұл индекс "соңғы" күйіне, 'F' жеткен миллиондаған қатарларды сақтамайды және әлі де "жұмысқа қажет" транзакцияларды іздейтін сұраныстарға осы индекс арқылы тиімді іздеуге мүмкіндік береді. Сол сияқты, ішінара индекс тек бағаны нөл емес қатарларды индекстеу үшін де пайдаланылуы мүмкін, бұл баған әдетте нөл болған кезде пайдалы болады.
create index partial object update on object table (updated on)
where updated on is not null;
Бұл индекс келесі сұраныстың тек жаңартылған жазбаларды оқуына мүмкіндік береді:
select * from object table
where updated on is not null
order by updated on;
Шарт индекстік критериймен бірдей болуы міндетті емес; Stonebraker-дің төмендегі мақаласында келесіге ұқсас индекстері бар бірнеше мысал келтірілген:
create index partial salary on employee(age)
where salary > 2100;
create index partial status on txn table (status)
where status in ('A', 'P', 'W');
This index would not bother storing any of the millions of rows that have reached "final" status, 'F', and would allow queries looking for transactions that still "need work" to efficiently search via this index. Similarly, a partial index can be used to index only those rows where a column is not null, which will be of benefit when the column usually is null. create index partial object update on object table (updated on)
where updated on is not null;
This index would allow the following query to read only the updated tuples:
select * from object table
where updated on is not null
order by updated on;
It is not necessary that the condition be the same as the index criterion; Stonebraker's paper below presents a number of examples with indexes similar to the following:
create index partial salary on employee(age)
where salary > 2100;
Қолдау
SQL Server-де индекстің осы түрі сүзгіленген индекс деп аталады. PostgreSQL 2002 жылдың ақпан айында жарық көрген 7.2 нұсқасынан бері ішінара индекстерді қолдайды. SQLite 3.8.0 нұсқасынан бастап ішінара индекстерді қолдайды. MongoDB 3.2 нұсқасынан бері ішінара индекстерді қолдайды.