Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> prosze o wyjasnienie działania indeksów
michat34
post 31.08.2012, 13:18:10
Post #1





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


witam, jestem w kursie mysql na rodziale poswieconym indeksom. na poczatku rozumialem o co chodzi, sluza do grupowania rekordow pod jakims kryterium zeby ulatwic dostep. ale im dalej sie zaglebialem to mniej rozumialem, przeczytalem kilka razy szukalem jakis innych kursow ale nie łapie tego do konca. czy ktos komu sie chce moglby mi objasnic ich działanie, uzycie i uzytecznosc? zawsze łatwiej jak moge zadac jakies pytania niz tylko tresc z kursu. pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 31.08.2012, 13:24:49
Post #2





Grupa: Moderatorzy
Postów: 36 477
Pomógł: 6301
Dołączył: 27.12.2004




Co do samych indeksów to tu nie ma żadnej filozofii zbytnio:
indeksy służą do szybszego wyszukiwania danych.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
michat34
post 31.08.2012, 13:41:34
Post #3





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


to wiem, ale jakie jest ich praktyczne wykorzystanie? czy np dzieki temu moge wykorzystac dane z jednej tabeli w drugiej?
Go to the top of the page
+Quote Post
nospor
post 31.08.2012, 13:49:29
Post #4





Grupa: Moderatorzy
Postów: 36 477
Pomógł: 6301
Dołączył: 27.12.2004




Praktyczne wykorzystanie?
Weź stwórz tabelę a w niej MILION rekordów. Następne wyszukuj jakiś danych w tej tabeli. Zajmie ci to dużo czasu.
A teraz zalóż indeks na pole po którym szukasz i ponów wyszukiwanie. Będzie to zrobione migiem.

Cytat
czy np dzieki temu moge wykorzystac dane z jednej tabeli w drugiej?
Jedno nie ma związku z drugim.
Powtarzam: indeksy same w sobie służą do przyspieszenia wyszukiwania informacji.
Możesz wiązać dane z różnych tabel ze sobą z indeksami czy bez nich. Ino że z indeksami będzie to szybsze.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
maly_swd
post 31.08.2012, 14:04:34
Post #5





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


Indexy to taki spis tresci.

Wez np duza ksiazke 1000stron i teraz aby odszukac konkretny rozdzial... bez spisu musialbys przegladac kazda storne i szukac. A dzieki indexowi wiesz ze aby odszukac kokretny rozdzial nalezy go szukac na 732 stronie.

I tak wlasnie dziala index, "baza" wie gdzie ma co zapisane.

Indexy moga pelnic jeszcze jedna wazna role, moga byc UNIKALNE, czyli nie bedzie mozliwe stworzenie wiecej niz jednego takiego samego "wpisu".


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
michat34
post 31.08.2012, 14:08:42
Post #6





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


hmm ok. w kursie jest taki przykalad zastosowania indeksow:

  1. CREATE TABLE `kategorie` (
  2. `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  3. `nazwa` VARCHAR(40) NOT NULL,
  4. `il_ksiazek` mediumint(9) DEFAULT NULL,
  5. PRIMARY KEY (`id`),
  6. KEY `il_ksiazek` (`il_ksiazek`)
  7. ) ENGINE=InnoDB;
  8.  
  9. INSERT INTO `kategorie` VALUES (1, 'Literatura polska', 4);
  10. INSERT INTO `kategorie` VALUES (2, 'Literatura zagraniczna', 2);
  11.  
  12. CREATE TABLE `ksiazki` (
  13. `id` INT(11) NOT NULL AUTO_INCREMENT,
  14. `nazwa` VARCHAR(100) NOT NULL,
  15. `wydawnictwo` VARCHAR(50) NOT NULL,
  16. `cena` FLOAT NOT NULL DEFAULT '0',
  17. `kategoria_id` mediumint(9) NOT NULL,
  18. PRIMARY KEY (`id`),
  19. KEY `kategoria_id` (`kategoria_id`)
  20. ) ENGINE=InnoDB;
  21.  
  22. INSERT INTO `ksiazki` VALUES (1, 'Hamlet', 'AAA', 6.5, 2);
  23. INSERT INTO `ksiazki` VALUES (2, 'Makbet', 'AAA', 6.8, 2);
  24. INSERT INTO `ksiazki` VALUES (3, 'Potop', 'BBB', 18.4, 1);
  25. INSERT INTO `ksiazki` VALUES (4, 'Quo vadis', 'BBB', 17.99, 1);
  26. INSERT INTO `ksiazki` VALUES (5, 'Pan Tadeusz', 'CCC', 13.78, 1);
  27. INSERT INTO `ksiazki` VALUES (6, 'Nad Niemnem', 'CCC', 15.45, 1);


moglbys mi wytłumaczyc jaka funkcje pełni tutaj ten indeks? do czego sie odwołuje? i jak działa?
Go to the top of the page
+Quote Post
nospor
post 31.08.2012, 14:11:26
Post #7





Grupa: Moderatorzy
Postów: 36 477
Pomógł: 6301
Dołączył: 27.12.2004




....

KEY `il_ksiazek` (`il_ksiazek`)
Przyspiesza wyszukiwanie/sortowanie po ilości książek

KEY `kategoria_id` (`kategoria_id`)
Przyspiesza łączenie tabeli ksiązki z tabelą kategorie

No przecież juz ci to mówiłem - przyspiesza.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
michat34
post 31.08.2012, 14:27:09
Post #8





Grupa: Zarejestrowani
Postów: 200
Pomógł: 1
Dołączył: 4.08.2012

Ostrzeżenie: (10%)
X----


to chyba sie probowalem doszukac jakis glbeszych tresci w Twojej wypowiedzi tongue.gif ale rozumiem, zwykłe przyspieszanie. przyklad ze spisem tresci tez był pomocny, dziekuje wink.gif mozna zamknac
Go to the top of the page
+Quote Post
alegorn
post 31.08.2012, 14:32:56
Post #9





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


można ując inaczej: indexy ułatwiają życie (bazie danych)


czasem są wykorzystywane do przyspieszenia wyszukiwania danych, a czasem do zapewnienia spójności danych (index typu primary, unique, forgin key)

te drugie, przede wszystkim zapewniają integralność danych. w kolejnym kroku optymalizują (przyśpieszają)

w mysql w silniku myisam są jeszcze klucze ułatwia przeszukiwanie zawartości tekstowych (full search text)

j.
Go to the top of the page
+Quote Post
viking
post 31.08.2012, 14:38:13
Post #10





Grupa: Zarejestrowani
Postów: 6 366
Pomógł: 1115
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Tylko kilka uwag.
Indeksy poprawnie nałożone przyśpieszają bo można wywołać skutek odwrotny.
Indeksy działają dla zapytań SELECT, dla innych operacji mogą spowodować zwolnienie (konieczność przebudowania indeksu)
Indeksy zabierają miejsce więc dla dużych tabel (wiele milionów rekordów) to będą spore wartości.


--------------------
Go to the top of the page
+Quote Post
sazian
post 31.08.2012, 17:37:55
Post #11





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


Witam,
działanie indeksów można bardzo łatwo zaobserwować przy pomocy EXPLAIN
prosty przykład
mam tablicę "test" w której jest 424 rekordów
chcemy pobrać rekord o id=1

zapytanie bez indeksów

Kod
EXPLAIN SELECT * FROM `test` WHERE id =1;

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | test  | ALL  | NULL          | NULL | NULL    | NULL |  424 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+


jak widać mysql musiał przeszukać wszystkie 424 rekordy(informacja w kolumnie rows) rekordy żeby wyszukać ten o id=1

test drugi
robimy dokładnie to samo ale najpierw nakładamy indeks

Kod
ALTER TABLE `test` ADD INDEX `id` ( `ID` );

EXPLAIN SELECT * FROM `test` WHERE id =1;
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
|  1 | SIMPLE      | test  | ref  | id            | id   | 8       | const |    1 |       |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+

teraz mysql przeszukał tylko jeden rekord i użył do tego klucza o nazwie "id"
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 10.06.2024 - 16:21