Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> procedury i triggery
ciekawski
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.05.2007

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


Witam,
jestem w tym temacie zasadniczo początkujący, dlatego mam na wstępie kilka pytań. Pierwsze, teoretyczne bardziej, to czy wykonanie procedury jest atomowe, tzn. objęte jedną transakcją (mam nadzieję, że mimo, iż pewnie źle to nazywam wiadomo o co chodzi (IMG:style_emoticons/default/smile.gif) ).
Drugie pytanie jest już bardziej praktyczne. Mianowicie robię prostą stronę, w której będzie wyszukiwarka. Do tej pory robiąc wyszukiwanie korzystałem z LIKE, jednak czytałem o jego wadach. Chciałbym korzystać z AGAINST MATCH, gdyż jest podobno lepsze, ale mam table InnoDB. Czy zatem taki trick, że będę dublować tabele, wyszukiwać w tabeli myisam, a wszystkie inne dane w tabeli InnoDB. Można by np po stronie mysql napisać do tego procedurę. Co sądzicie o takim rozwiązaniu? Zależy mi na wydajności, ale też dobrym wyszukiwaniu (wiem, że istnieją silniki do wyszukiwania pełnotekstowego, ale nie na poziomie php, więc nie chciałbym z nich korzystać). Jakie są Wasze przemyślenia na ten temat? Opłaca się takie coś stosować? Też pytanie o zalety InnoDB nad myisam, bo być może tabele z podstronami zrobić w myisam (wówczas tracę możliwość transakcji z udziałem tej tabeli, co też nie za bardzo mi się podoba). Proszę o Wasze opinie...

z góry dzięki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Co zamiast MyIsam
Sposobów na wyszukiwanie jest w cholere więcej. Możesz użyć n-gramów i będzie spoko. Możesz również użyć Sphinxa - jeszcze lepiej.

MyIsam : InnoDb -> MyIsam
Także jeżeli pomimo wszystko chcesz używać myisam do wyszukiwania to triggerem możesz kopiować zawartość pola z tabeli InnoDB do MyISAM (po to żeby zaoszczędzić miejsce).
Przy wyszukiwaniu pobierasz tylko ID komentarza z tabeli MyIsam
  1. SELECT a.*
  2. FROM myisam_table a
  3. INNER JOIN innodb_table b USING (id)
  4. WHERE (...)


Oczywiście rodzi to jeden problem. Dane kopiowane w triggerze nie zostaną objęte transakcją, także nie ma szansy zrobić rollbacka aczkolwiek możesz to obejść przez odpalenie co jakiś czas skryptu czyszczącego MyIsam z rekordów, które nie istnieją w drugiej tabeli.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 28.09.2025 - 04:30