2008-08-04 41 views
47

Mam nadzieję, że mogę uzyskać odpowiedzi dla każdego serwera bazy danych.Jak indeksować kolumnę bazy danych

Dla zarysu jak działa indeksowania sprawdź: How does database indexing work?

+0

Wydaje się to być pytaniem, na które dobrze odpowiedzą dokumenty dotyczące serwera bazy danych, z którego możesz korzystać. W przypadku Oracle: [http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/indexes003.htm](Oracle) –

+0

Po kliknięciu powyższego linku dla Oracle nie uzyskałem poprawnej strony . Umieszczenie poprawnego linku: http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm –

+4

Jednym z zadeklarowanych celów SO jest wyświetlenie go jako pierwszego w wyszukiwarce Google. Często odpowiedź na to pytanie jest lepsza niż same dokumenty. Czy nie byłoby warto utworzyć odpowiedź tutaj jako wspólnotową wiki, aby zestawić wszystkie odpowiedzi? –

Odpowiedz

53

Poniżej SQL92 norma więc powinien być obsługiwany przez większość RDMBS wykorzystujących SQL:

CREATE INDEX [index name] ON [table name] ([column name]) 
+2

W większości systemów można również użyć wielu kolumn, dodając listę kolumn oddzieloną przecinkami zamiast pojedynczej kolumny. –

6

SQL Server 2005 daje możliwość określenia indeksu pokrywającego. Jest to indeks zawierający dane z innych kolumn na poziomie liścia, więc nie trzeba wracać do tabeli, aby uzyskać kolumny, które nie są zawarte w kluczach indeksu.

utworzyć indeks nieklastrowany my_idx na my_table (my_col1 asc, my_col2 asc) include (my_col3);

Jest to nieocenione dla zapytania, które ma mój_col3 na liście select, a my_col1 i my_col2 w klauzuli where.

4

Dla pytables Python, indeksy nie mają nazwy i są one zobowiązane do pojedynczych kolumnach:

tables.columns.column_name.createIndex() 
4

W SQL Server, można wykonać następujące czynności: (. MSDN Link do pełnej listy opcji)

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> (column [ ASC | DESC ] [ ,...n ]) 
    [ INCLUDE (column_name [ ,...n ]) ] 
    [ WHERE <filter_predicate> ] 

(pomijając kilka bardziej zaawansowanych opcji ...)

Nazwa każdego indeksu musi być unikatowa w bazie szerokości.

Wszystkie indeksy mogą mieć wiele kolumn, a każdą kolumnę można zamówić w dowolnej kolejności.

Indeksy klastrowe są unikalne - jeden na tabelę. Nie mogą mieć kolumn d o wartości INCLUDE.

Indeksy nieklastrowane nie są unikalne i mogą mieć do 999 na tabelę. Mogą zawierać kolumny i klauzule.

2

Aby utworzyć indeksy następujące rzeczy można stosować:

  1. Tworzy indeks na stole. Dozwolone są zduplikowane wartości:

    CREATE INDEX nazwa_indeksu ON nazwa_tabeli (nazwa_kolumny)

  2. Tworzy indeks unikatowy na stole.zduplikowane wartości nie są dozwolone: ​​

    tworzyć unikalne INDEX index_name ON nazwa_tabeli (nazwa_kolumny)

  3. Clustered Index

    TWORZENIE indeksu klastrowego CL_ID ze sprzedaży (ID);

  4. nieklastrowanym wskaźnik

    TWORZENIE nieklastrowe INDEX NONCI_PC ze sprzedaży (kod_produktu);

odsyłają http://www.codeproject.com/Articles/190263/Indexes-in-MS-SQL-Server w celu uzyskania szczegółowych informacji.

1

1.

CREATE INDEX name_index ON Employee (Employee_Name) 
  1. na multi kolumny

    CREATE INDEX name_index ON Employee (Employee_Name, Employee_Age) 
    
0

Powinieneś tylko indeks kolumny, na których wykonują częste przeszukiwanie/zapytania.

Załóżmy, że masz tabelę o nazwie Uczniowie, w której przechowujesz StudentID, Imię, kurs, Stopień itp. Musisz też często wyszukiwać w kolumnie StudentID, aby uzyskać informacje o konkretnych uczniach.

SELECT Name, Course, Grade 

FROM Students 

WHERE StudentID = 111025 

Powinieneś utworzyć indeks na tej kolumnie, ponieważ przyspieszy to proces wyszukiwania. Można utworzyć indeks na istniejącej kolumny z następującego kodu:

CREATE INDEX IndexStudentID 

ON Students (StudentID) 

Nazwa IndexStudentID może być cokolwiek, wybierz coś, co sensu dla Ciebie.

Jednak utworzenie indeksu zwiększy obciążenie bazy danych. Istnieje wiele narzędzi, które mogą pomóc, na przykład, używam SQLDbm, ponieważ to mi najbardziej odpowiada.