Witam,
Propozycja katalogu instytucji.
Mój wstępny projekt bazy wygląda tak:
  1. CREATE TABLE ins_dzial (
  2. dzi_id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. dzi_nazwa varchar(150) NOT NULL DEFAULT '',
  4. dzi_pozycja smallint(6) NOT NULL DEFAULT '0',
  5. UNIQUE KEY dzi_id (dzi_id)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  7.  
  8. CREATE TABLE ins_poddzial (
  9. pod_id smallint(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  10. dzi_id smallint(6) NOT NULL DEFAULT '0',
  11. pod_nazwa varchar(100) NOT NULL DEFAULT '',
  12. pod_pozycja smallint(6) NOT NULL DEFAULT '0',
  13. UNIQUE KEY pod_id (pod_id)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  15.  
  16. CREATE TABLE ins_przydzial (
  17. -- przypisuje instytucje do poddziałów (średnio 2-3)
  18. id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  19. ins_id int(10) UNSIGNED NOT NULL DEFAULT '0',
  20. pod_id smallint(5) UNSIGNED NOT NULL DEFAULT '0',
  21. UNIQUE KEY id (id)
  22. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;
  23.  
  24. CREATE TABLE instytucja (
  25. ins_id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  26. ins_nazwa varchar(255) NOT NULL DEFAULT '',
  27. ins_nazwa_pl varchar(100) NOT NULL DEFAULT '',
  28. -- sortująca (np w tym polu usuwane są rozpoczynające nazwę cudzysłowy,
  29. -- w starych wersjach baz mysql pomaga sortować pl znaki
  30. ins_opis text NOT NULL,
  31. ins_obraz varchar(30) NOT NULL DEFAULT '',
  32. ins_opis_obr varchar(60) NOT NULL DEFAULT '',
  33. UNIQUE KEY ins_id (ins_id),
  34. KEY ins_nazwa (ins_nazwa(10))
  35. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;


Od razu mówię, że nie bardzo znam się na indeksach. Baza ma zawierać dużo wpisów... a zależy mi oczywiście na szybkich zapytaniach nie obciążających zbytnio serwera (dużo odwiedzających) wyciągających np:
1 ile jest instytucji w danym dziale;
wyszedł mi taki LEFT JOINowy kwiatek winksmiley.jpg
  1. SELECT COUNT(*) AS suma,dzi_nazwa
  2. FROM ins_dzial LEFT JOIN ins_poddzial ON ins_dzial.dzi_id=ins_poddzial.dzi_id
  3. LEFT JOIN ins_przydzial ON ins_przydzial.pod_id=ins_poddzial.pod_id
  4. LEFT JOIN instytucja ON instytucja.ins_id=ins_przydzial.ins_id
  5. GROUP BY ins_dzial.dzi_id
- limit 0, 30,dla 26 000 instyt, 30 działów, 900 poddziałów, 80 000 przydziałów czas : 0.8
2 ile jest w poddziale:
  1. SELECT COUNT( * ) AS suma, pod_nazwa, dzi_nazwa
  2. FROM ins_dzial LEFT JOIN ins_poddzial ON ins_dzial.dzi_id = ins_poddzial.dzi_id
  3. LEFT JOIN ins_przydzial ON ins_przydzial.pod_id = ins_poddzial.pod_id
  4. LEFT JOIN instytucja ON instytucja.ins_id = ins_przydzial.ins_id
  5. GROUP BY ins_poddzial.pod_id
limit o,30, czas: 0.8
3 wyświetlenie instytucji z danego poddziału (LIMIT 50) sort nazwa_pl:
  1. SELECT ins_nazwa, instytucja.ins_id
  2. FROM instytucja LEFT JOIN ins_przydzial ON ins_przydzial.ins_id = instytucja.ins_id
  3. LEFT JOIN ins_poddzial ON ins_poddzial.pod_id = ins_przydzial.pod_id
  4. WHERE ins_poddzial.pod_id =45
  5. ORDER BY ins_nazwa_pl
  6. LIMIT 0, 50
nie wiele daje dodawanie indexu do np ins_nazwa_pl, czas 0.46 (wolno)
4 wyświetlenie instytucji z danego działu (LIMIT 50) sort nazwa_pl;
  1. SELECT ins_nazwa, instytucja.ins_id
  2. FROM instytucja LEFT JOIN ins_przydzial ON ins_przydzial.ins_id = instytucja.ins_id
  3. LEFT JOIN ins_poddzial ON ins_poddzial.pod_id = ins_przydzial.pod_id
  4. LEFT JOIN ins_dzial ON ins_dzial.dzi_id = ins_poddzial.dzi_id
  5. WHERE ins_dzial.dzi_id =20
  6. ORDER BY ins_nazwa_pl
  7. LIMIT 0, 50
czas o dziwo szybciej: 0.04??
5 wyciągnięcie instytucji na literkę A (LIMIT 50) sort nazwa_pl
  1. SELECT ins_nazwa, instytucja.ins_id
  2. FROM instytucja WHERE ins_nazwa LIKE 'a%'
  3. ORDER BY ins_nazwa_pl
  4. LIMIT 0, 50
czas 0.0013
6 wyciągnięcie instytucji które w /nazwie/ v /opisie/ v /nazwie pliku/ mają słowo "fundacja" lub jakąś frazę. sort nazwa_pl.
  1. SELECT ins_nazwa, instytucja.ins_id
  2. FROM instytucja WHERE ins_nazwa LIKE '%gm%' OR ins_opis LIKE '%gm%' OR ins_opis_obr LIKE '%gm%'
  3. ORDER BY ins_nazwa_pl
  4. LIMIT 0, 50
szybko o.003
Jak to się ma do wykorzystania wyszukiwania pełnotekstowego (szybkość)?

Nie bardzo rozumiem co dają mi indexy?? może ktoś mi doradzi.

Czekam na wasze komentarze co do struktury (oraz INDEXÓW) i szybsze zapytania smile.gif

Toom