xorg 693 Zgłoś post Napisano Wrzesień 7, 2010 Mam tabele w bazie danych, która obecnie ma 2 miliony rekordów. Pola w tabeli są następujące: varchar (255) varchar2 (255) bigint (20) Obecnie mam primary key oraz fulltext przypisany na pierwszego varchar. I teraz, pytanie, które zapytania wykonają się szybciej? Wariant a) SELECT * from tabele WHERE varchar = 'ciagznakow' LIMIT 1 I tak, jeżeli znajdzie przypasowanie (varchar jest unikalnym rekordem, lecz nie ma indeksu unique obecnie) to wykonuje UPDATE tabela SET varchar2='costamwsadzamy', bigint=jakascyfra WHERE varchar ='ciagznakow' LIMIT 1 i jeżeli nie znajdzie dopasowania to INSERT INTO tabela VALUES('ciagznakow','costamwsadzamy',jakascyfra) I tak mam obecnie, jednakże rozważam zmianę. Wariant Nadać na pole varchar unique key - i tak jest unikalny, i następnie zaczynając od zapytania INSERT INTO [...] - i jeżeli mysql zwróci błąd o duplikacji klucza wtedy dać polecenie UPDATE [...] - pozwoliłoby uniknąć tego SELECT'a. Optymalizacja - nawet mała - jest tutaj bardzo potrzebna, gdyż dziennie tychże zapytań wykonuje się kilkadziesiąt tysięcy. Udostępnij ten post Link to postu Udostępnij na innych stronach
regdos 1848 Zgłoś post Napisano Wrzesień 7, 2010 Użyj REPLACE, które właśnie tak działa czyli dodaje jeżeli nie ma jest a usuwa i dodaje ponownie jeżeli jest. Udostępnij ten post Link to postu Udostępnij na innych stronach
tomiabc 0 Zgłoś post Napisano Wrzesień 7, 2010 daj na varchar unique spróbuj utwórzyć trigger before update, który będzie próbował dodawać (insert) do tej pory ten select był obsługiwany z poziomu interfejsu? Udostępnij ten post Link to postu Udostępnij na innych stronach