У чым розніца паміж першасным і другасным індэксам? І ў чым перавага аднаго перад другім?


адказ 1:

Дазвольце мне спачатку растлумачыць падабенства:

Падабенства

  • Абедзве структуры індэкса рэалізуюцца як асобныя аб'екты першага класа ў базе дадзеных. Гэта азначае, што табліца і яе адпаведны індэкс (першасны або другасны) існуюць як дзве асобныя структуры. Абодва рэалізуюць ўскосны пласт, дзе запыты спачатку шукаюць індэкс і выкарыстоўваюць вынік гэтага пошуку для непасрэднага атрымання запісу, на якую яны паказваюць. Індэксныя блокі ў абодвух тыпах індэкса падтрымліваюць сартаванне запісаў. г.зн. незалежна ад таго, што фактычная запіс індэкса →, запісы ў блоку індэкса заўсёды сартуюцца ў залежнасці ад ключа індэкса / пошуку.

Адрозненні

Першасны індэкс

  • Першасны індэкс уплывае на захоўванне і арганізацыю радкоў у блоках дадзеных. Блокі дадзеных - гэта таблічныя блокі, у якіх захоўваюцца фактычныя дадзеныя радкоў (некалькі слупкоў). Для асноўнага індэкса радкі павінны быць адсартаваныя ў блокі дадзеных у індэксавым ключы. У дадатак да таго, што самі запісы індэксаў адсартаваныя ў індэкс-блоку, асноўны індэкс таксама вымушаны: паслядоўнасць радкоў у блоках дадзеных. На наступнай схеме, запазычанай у "Укараненне сістэмы баз дадзеных Garcia Molina et al.", Паказана, як запісы індэксаў у блоках індэксаў (злева) змяшчаюць паказальнікі (гэта лакатары радкоў у тэрміналогіі баз дадзеных) радкоў у блоках дадзеных (справа). Кожны блок дадзеных утрымлівае радкі ў адсартаваным парадку ў адпаведнасці з індэксавым ключом.
  • Першасны індэкс можа быць створаны як для ключавых, так і для ня ключавых слупкоў. Не існуе першаснага індэкса, прызначанага толькі для першаснага ключа. Так, звычайна ён ствараецца на першасным ключы табліцы. Паколькі асноўны індэкс змяняе спосаб (радкі павінны сартаваць), каб дадзеныя былі арганізаваны ў табліцы, дадзеная табліца можа ўтрымліваць максімум 1 першасны індэкс.

Другасны паказчык

  • Другасны індэкс не аказвае ўплыву на тое, як радкі на самай справе арганізаваны ў блоках дадзеных. Яны могуць быць у любым парадку. Адзіны парадак - індэкс-ключ у блоках індэкса. На наступнай схеме ад “Укараненне сістэмы баз дадзеных Garcia Molina і інш.” Паказана, як запісы індэксаў у блоках індэксаў (злева) змяшчаюць паказальнікі (гэта лакатары радкоў у тэрміналогіі базы дадзеных)) да адпаведных радкоў у блоках дадзеных (справа). Ні адзін радок не адсартаваны ў блоках дадзеных у адпаведнасці з індэксавым ключом

Параўнанне

  • Па-першае, карыстальнік можа вызначыць некалькі другасных індэксаў, паколькі яны не ўплываюць на арганізацыю радкоў у табліцы. Аднак можа быць толькі адзін першасны індэкс. Паколькі першасны індэкс не абавязкова павінен знаходзіцца на першасным ключы, першасны індэкс таксама можа ўтрымліваць дублікаты індэкса. На самай справе, прыклад вышэй для другаснага індэкса для дублікатаў ключоў. Гэта агульнае для абодвух. Зразумела, калі першасны індэкс створаны на першасным ключы, нельга дубляваць індэксныя ключы, таму што першасны ключ выконвае Унікальнае абмежаванне. І першасны, і другасны індэксы могуць выкарыстоўвацца для пошуку кропак і запытаў аб дыяпазоне. Чакаецца, што ў абодвух выпадках дыяпазон запытаў на першасны індэкс - унікальны індэкс і дублікат ключа. Як чакаецца, пошук кропкі ў выпадку індэкса NON UNIQUE будзе хутчэйшы з першасным індэксам. Аднак, калі індэкс унікальны, у ідэале пошук пункту з першасным і другасным індэксам павінен займаць аднолькавы час - па меншай меры, аднолькавая колькасць уводу / высновы. Гэта таму, што першасны індэкс прымушае парадак радкоў у блоках дадзеных. Такім чынам, калі карыстальнік зацікаўлены ў пошуку радкоў для WHERE KEY> = 20 AND KEY <= 40, ёсць вялікая верагоднасць таго, што будзе прачытана менш блокаў дыскаў і, адпаведна, менш уводу / выводу. Магчыма, радкі, якія адпавядаюць гэтым клавішам, знаходзяцца ў адным блоку дадзеных (нават калі індэкс не з'яўляецца унікальным). З іншага боку, другасны індэкс не мае кантролю над арганізацыяй радкоў. Тое ж самае прыклад пошуку ўсіх запісаў дадзеных паміж 20 і 40, таму запісы дадзеных, якія адпавядаюць кожнай клавішы, могуць знаходзіцца ў асобным блоку дадзеных. Зразумела, гэта азначае, што ўводу-вываду будзе больш, і таму запыты з другасным індэксам могуць быць менш эфектыўнымі. Для кропкавага пошуку з унікальнымі ключамі індэкса не мае значэння, ці з'яўляецца індэкс першасным або другасным. Вынікам пошуку з'яўляецца пошук радкоў, і база дадзеных па-ранейшаму павінна прытрымлівацца яго, каб атрымаць рэальны запіс. Такім чынам, існуе адзіны я / О. Паколькі асноўны індэкс прымушае парадак радкоў у блоках дадзеных, DML з'яўляюцца менш эфектыўнымі. Паколькі DML павінны ўтрымліваць радкі ў адсартаваным парадку ў блоку дадзеных, INSERT / UPDATE прыводзіць да частых зрухаў радкоў, калі карыстальнік не пераканаецца, што ўстаўкі вырабляюцца ў паслядоўным парадку. Кожны DML вядзе да змены радка ў радку даных.Блок таксама патрабуе абнаўлення адпаведнай структуры першаснага індэкса пасля запісу індэкса. Цяпер неабходна знайсці новы лакатар радкоў (паколькі радок зрушаны). Рух радкоў таксама патрабуе абнаўлення структуры другаснага індэкса, але верагоднасць таго, што INSERT выклікае рух радка, адносна невялікая для другаснага індэкса, таму што гэта INSERT. Не варта весці радкі ў блоку дадзеных у адсартаваным парадку. Такія выпадкі, як растуць радкі, якія трэба перанесці разам у іншы блок - адзін з нямногіх выпадкаў перамяшчэння радкоў у другасным індэксе.

адказ 2:

Першасны індэкс - гэта структура захоўвання, якая змяшчае фактычныя базавыя радкі табліцы ў макеце захоўвання, заснаваным на дрэве B. Як правіла, індэкс арганізуецца вакол PRIMARY KEY, калі такі пазначаны.

Першасныя індэксы часам называюць "кластарнымі індэксамі", хаця не ўсе рэчы, якія называюцца кластарнымі індэксамі, з'яўляюцца "сапраўднымі" рэалізацыямі асноўных індэксаў (гэта значыць не тыя, што ў PostgreSQL).

Пераважная большасць рухавікоў захоўвання захоўвае радкі базавай табліцы без якога-небудзь канкрэтнага парадку, атрыманага з дадзеных калонкі, і не рэалізуе "рэальныя" першасныя індэксы.

Нешматлікія рухавікі захоўвання БД на самай справе рэалізуюць першасныя індэксы. "Oracle" Арганізаваныя табліцы "Oracle і MySQL InnoDB - гэта найбольш часта выкарыстоўваюцца рухавікі захоўвання дадзеных, якія рэалізуюць першасныя індэксы.

Найбольшая перавага структуры захоўвання, арганізаванай індэксамі, заключаецца ў тым, што для пошуку на ПЕРШЫКОВЫМ КЛЮЧАМ патрабуецца аднакратная «прагулка» базавага дрэва B. У большасці іншых масіваў памяці першапачатковы пошук патрабуе двух этапаў: адзін, каб знайсці паказальнік радка асноўнай табліцы ў другаснай структуры індэкса, пабудаванай вакол ПК, і сам выбар радка.

У гэтых дамоўленасцях пошукавыя ПК у ПК не танней, чым пошукі з іншым паказчыкам.

Паколькі асноўны індэкс выкарыстоўваецца для арганізацыі асноўнай табліцы, вы атрымліваеце толькі адзін на табліцу.

Галоўным недахопам памяці першаснага індэкса ў параўнанні з іншымі тыпамі памяці з'яўляецца тое, што загрузка можа быць павольней, паколькі кожны INSERT ў базавай табліцы павінен прайсці праз дрэва B, каб даведацца, дзе радок будзе захоўвацца. Паколькі большасць рухавікоў захоўвання дадзеных, якія падтрымліваюць першасныя індэксы, выкарыстоўваюць першасны індэкс-ключ у якасці ідэнтыфікатара пошуку для другасных індэксаў, вы можаце выкарыстоўваць другасныя індэксы, якія займаюць шмат месца, калі ў вас ёсць доўгі першасны ключ (гэта значыць, калі вы выкарыстоўваеце нешта накшталт глабальнага унікальнага ідэнтыфікатара, як PK і з іншымі паказчыкамі).


адказ 3:

Першасны індэкс - гэта структура захоўвання, якая змяшчае фактычныя базавыя радкі табліцы ў макеце захоўвання, заснаваным на дрэве B. Як правіла, індэкс арганізуецца вакол PRIMARY KEY, калі такі пазначаны.

Першасныя індэксы часам называюць "кластарнымі індэксамі", хаця не ўсе рэчы, якія называюцца кластарнымі індэксамі, з'яўляюцца "сапраўднымі" рэалізацыямі асноўных індэксаў (гэта значыць не тыя, што ў PostgreSQL).

Пераважная большасць рухавікоў захоўвання захоўвае радкі базавай табліцы без якога-небудзь канкрэтнага парадку, атрыманага з дадзеных калонкі, і не рэалізуе "рэальныя" першасныя індэксы.

Нешматлікія рухавікі захоўвання БД на самай справе рэалізуюць першасныя індэксы. "Oracle" Арганізаваныя табліцы "Oracle і MySQL InnoDB - гэта найбольш часта выкарыстоўваюцца рухавікі захоўвання дадзеных, якія рэалізуюць першасныя індэксы.

Найбольшая перавага структуры захоўвання, арганізаванай індэксамі, заключаецца ў тым, што для пошуку на ПЕРШЫКОВЫМ КЛЮЧАМ патрабуецца аднакратная «прагулка» базавага дрэва B. У большасці іншых масіваў памяці першапачатковы пошук патрабуе двух этапаў: адзін, каб знайсці паказальнік радка асноўнай табліцы ў другаснай структуры індэкса, пабудаванай вакол ПК, і сам выбар радка.

У гэтых дамоўленасцях пошукавыя ПК у ПК не танней, чым пошукі з іншым паказчыкам.

Паколькі асноўны індэкс выкарыстоўваецца для арганізацыі асноўнай табліцы, вы атрымліваеце толькі адзін на табліцу.

Галоўным недахопам памяці першаснага індэкса ў параўнанні з іншымі тыпамі памяці з'яўляецца тое, што загрузка можа быць павольней, паколькі кожны INSERT ў базавай табліцы павінен прайсці праз дрэва B, каб даведацца, дзе радок будзе захоўвацца. Паколькі большасць рухавікоў захоўвання дадзеных, якія падтрымліваюць першасныя індэксы, выкарыстоўваюць першасны індэкс-ключ у якасці ідэнтыфікатара пошуку для другасных індэксаў, вы можаце выкарыстоўваць другасныя індэксы, якія займаюць шмат месца, калі ў вас ёсць доўгі першасны ключ (гэта значыць, калі вы выкарыстоўваеце нешта накшталт глабальнага унікальнага ідэнтыфікатара, як PK і з іншымі паказчыкамі).


адказ 4:

Першасны індэкс - гэта структура захоўвання, якая змяшчае фактычныя базавыя радкі табліцы ў макеце захоўвання, заснаваным на дрэве B. Як правіла, індэкс арганізуецца вакол PRIMARY KEY, калі такі пазначаны.

Першасныя індэксы часам называюць "кластарнымі індэксамі", хаця не ўсе рэчы, якія называюцца кластарнымі індэксамі, з'яўляюцца "сапраўднымі" рэалізацыямі асноўных індэксаў (гэта значыць не тыя, што ў PostgreSQL).

Пераважная большасць рухавікоў захоўвання захоўвае радкі базавай табліцы без якога-небудзь канкрэтнага парадку, атрыманага з дадзеных калонкі, і не рэалізуе "рэальныя" першасныя індэксы.

Нешматлікія рухавікі захоўвання БД на самай справе рэалізуюць першасныя індэксы. "Oracle" Арганізаваныя табліцы "Oracle і MySQL InnoDB - гэта найбольш часта выкарыстоўваюцца рухавікі захоўвання дадзеных, якія рэалізуюць першасныя індэксы.

Найбольшая перавага структуры захоўвання, арганізаванай індэксамі, заключаецца ў тым, што для пошуку на ПЕРШЫКОВЫМ КЛЮЧАМ патрабуецца аднакратная «прагулка» базавага дрэва B. У большасці іншых масіваў памяці першапачатковы пошук патрабуе двух этапаў: адзін, каб знайсці паказальнік радка асноўнай табліцы ў другаснай структуры індэкса, пабудаванай вакол ПК, і сам выбар радка.

У гэтых дамоўленасцях пошукавыя ПК у ПК не танней, чым пошукі з іншым паказчыкам.

Паколькі асноўны індэкс выкарыстоўваецца для арганізацыі асноўнай табліцы, вы атрымліваеце толькі адзін на табліцу.

Галоўным недахопам памяці першаснага індэкса ў параўнанні з іншымі тыпамі памяці з'яўляецца тое, што загрузка можа быць павольней, паколькі кожны INSERT ў базавай табліцы павінен прайсці праз дрэва B, каб даведацца, дзе радок будзе захоўвацца. Паколькі большасць рухавікоў захоўвання дадзеных, якія падтрымліваюць першасныя індэксы, выкарыстоўваюць першасны індэкс-ключ у якасці ідэнтыфікатара пошуку для другасных індэксаў, вы можаце выкарыстоўваць другасныя індэксы, якія займаюць шмат месца, калі ў вас ёсць доўгі першасны ключ (гэта значыць, калі вы выкарыстоўваеце нешта накшталт глабальнага унікальнага ідэнтыфікатара, як PK і з іншымі паказчыкамі).