![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) ![]() ![]() |
Hej!
Mam zapytanie typu:
gdzie tabela ma silnik InnoDB, a pole jest typu char(200), oczywiście istnieje indeks na kolumnie "pole". W polu "pole" trzymam numery oddzielone znakami średnika: Cytat 3123123131;5124124314;44123123;312312312; chciałbym wyszukać czy istnieje chociaż jeden rekord zawierający jakiś numer (np 44123123). Niestety rekordów jest 300.000 (i rośnie) a za jedną operacją (skrypt PHP) wyszukiwanie następuje około 1000razy. Niestety zapytanie typu:
trwa 4sekundy co przy 1000 opracjach skutecznie zawiesza skrypt :/ Pewnie można by było użyć FULL-TEXT Search ale jest to tablica typu InnoDB w którym to FULL-TEXT nie występuje (IMG:style_emoticons/default/sad.gif) Bardzo obawiam się zmienić rodzaj silnika z InnoDB na MyISAM i bardzo niechętnie to zrobię. (Wiąże się to dla mnie z kilkoma dniamia testów czy nic się nie popsuło) + audyt. Czy ktoś ma pomysł jak zoptymalizować takie wyszukiwanie? Może ostatecznością jest wyszukać to w PHP? :/ |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Najpierw opi..dol gościa, który to tak zaprojektował, a potem szybko to zmień. Dorób dodatkową tabelę "znormalizowaną", w której będziesz przechowywał informacje jeden do wielu. Np. zamiast
id pole 1 3123123131;5124124314;44123123;312312312; będziesz miał: rec_id pole 1 3123123131 1 5124124314 1 44123123 1 312312312 trochę ci zajmie przeorbienie tego, ale będą z tego same korzyści... Np. krócej będziesz myślal nad zaptytaniami i będą one szybsze. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 12:34 |