рдУрд░реЗрдХрд▓ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЗ

рд╣рдм рдкрд░ рдПрдХ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ Oracle DBMS рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдореИрдВрдиреЗ "рдХрд▓рдо рдкрд░реАрдХреНрд╖рдг" рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА


рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдУрд░реЗрдХрд▓ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ - рдЕрдиреБрдХреНрд░рдорд┐рдд, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдкрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдУрд░реЗрдХрд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЙрд╕рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
create table t1 (t1_key number, t1_value varchar2(10)); insert into t1 values(1, '1'); insert into t1 values(2, '2'); insert into t1 values(3, '3'); insert into t1 values(4, '4'); insert into t1 values(5, '5'); insert into t1 values(6, '6'); insert into t1 values(7, '7'); insert into t1 values(8, '8'); insert into t1 values(9, '9'); 

рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
 explain plan for [query goes here]; select * from table(dbms_xplan.display(null,null,'basic')); 

рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдЕрдЧрд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 drop index index_name; 

рдЯреЗрдмрд▓ рдкреВрд░реНрдг рд╕реНрдХреИрди


рдпрд╣ рдЕрднрд┐рдЧрдо рд╡рд┐рдзрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЗрд╕рдореЗрдВ рдЙрди рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдХрд┐ рдЬрд╣рд╛рдВ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕реЗ рдпрд╛ рддреЛ рддрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд┐рдзреЗрдп рдХреА рд╕реНрдерд┐рддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдпрд╛ рдЬрдм рд╕реВрдЪрдХрд╛рдВрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг:
 select t1_key, t1_value from t1 where t1_key = 5; ---------------------------------- | Id | Operation | Name | ---------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS FULL| T1 | ---------------------------------- create index key_index on t1 (t1_key); select t1_key, t1_value from t1 where t1_value = '5'; ---------------------------------- | Id | Operation | Name | ---------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS FULL| T1 | ---------------------------------- 

ROWID рджреНрд╡рд╛рд░рд╛ рдЙрд░реНрдлрд╝ рдкрд╣реБрдВрдЪ, рдЙрд░реНрдл тАЛтАЛROWID


рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ (рдЖрд░рдУрдбрдмреНрд▓реНрдпреВрдЖрдИрдбреА) рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВред рдпрд╣ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

рд╣рдо рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ Oracle рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рд╕реВрдЪрдХрд╛рдВрдХ рдкреВрд░реНрдг рд╕реНрдХреИрди


рдпрд╣ рдЕрднрд┐рдЧрдо рд╡рд┐рдзрд┐ рд╡рд┐рдзреЗрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рднреА рдкрддреНрддреА рдмреНрд▓реЙрдХреЛрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рддреА рд╣реИред рдУрд░реЗрдХрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ NULL рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдорддреМрд░ рдкрд░ рдЯреЗрдмрд▓ рдлреБрд▓ рд╕реНрдХреИрди рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдХреНрд╕ рд░реЗрдВрдЬ рд╕реНрдХреИрди (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИред

рдЗрдВрдбреЗрдХреНрд╕ рдлрд╛рд╕реНрдЯ рдлреБрд▓ рд╕реНрдХреИрди


рдЗрд╕ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм INDEX FULL SCAN рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╕рднреА рдбреЗрдЯрд╛ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рддрдХ рд╕реНрд╡рдпрдВ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред INDEX FULL SCAN рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд╡рд┐рдзрд┐ рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рдмреНрд▓реЙрдХ рдкрдврд╝ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯреЗ рдорд╛рдиреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рд╡рд┐рдирд┐рдпрдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Oracle рдмрд┐рдЯрдореИрдк рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕реВрдЪрдХрд╛рдВрдХ рд░реЗрдВрдЬ рд╕реНрдХреИрди


рдпрд╣ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ Oracle рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдЬрд╣рд╛рдБ рдХреНрд▓реЙрдЬрд╝ рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдХреНрд╕ рдХреЙрд▓рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ = (рдпрджрд┐ рдЕрдиреБрдХреНрд░рдорд┐рдд рдорд╛рди рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИрдВ),>, <, рдФрд░ 'рдкреИрдЯрд░реНрди%' рднреА рдкрд╕рдВрдж рд╣реИ, рдФрд░ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб-рд╡рд░реНрдг рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред TULL FULL SCAN рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рдПрдХреНрд╕реЗрд╕ рдореЗрдердб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, Oracle рд╕рднреА рд▓реАрдл рдмреНрд▓реЙрдХ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, INDEX RANGE SCAN рддреЗрдЬреА рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 select * from t1 where t1_key = 3; ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| T1 | | 2 | INDEX RANGE SCAN | KEY_INDEX | ------------------------------------------------- 

INDEX UNIQUE SCAN


рдЗрд╕ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм UNIQUE / PRIMARY KEY рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╢рд░реНрддреЛрдВ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░реЗрдВ, рдХреНрд╡реЗрд░реА рдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг:
 create unique index u_key_index on t1 (t1_key); --------------------------------------------------- | Id | Operation | Name | --------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| T1 | | 2 | INDEX UNIQUE SCAN | U_KEY_INDEX | --------------------------------------------------- 

INDEX SKIP SCAN


рдЗрд╕ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрд╣рд▓реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЙрд▓рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рдЬрдЧрд╣ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдкрд░ рд╡рд┐рдзреЗрдп рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдЕрднрд┐рдЧрдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдбреЗрдЯрд╛ рдЗрддреНрдпрд╛рджрд┐ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рддреБрд░рдВрдд рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):
 create table t2 as (select * from all_objects); -- data_object_id     ,  object_id create index test_index on t2 (data_object_id, object_id); --    begin dbms_stats.gather_table_stats(user, 'T2', cascade=>true); end; --   select * from t2 where object_id=370; --   object_id -------------------------------------------------- | Id | Operation | Name | -------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| T2 | | 2 | INDEX SKIP SCAN | TEST_INDEX | -------------------------------------------------- 


рдЕрд╕реНрд╡реАрдХрд░рдг


рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рд▓рд╛рдЧрдд-рдЖрдзрд╛рд░рд┐рдд-рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ (CBO) рдПрдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдХреНрд╕реЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрдерди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╖реНрдЯрддрдо рд╡рд┐рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред

Source: https://habr.com/ru/post/In189574/


All Articles