Skocz do zawartości

Web Hosting Talk

  • progreso.pl

    Partner technologiczny

    Upraszczamy to, co inni starają się komplikować. Prosto, pewnie, przyjaźnie - tak robimy hosting!
  • Kei.pl

    Partner technologiczny

    Kei.pl działa na polskim rynku internetowym od 2000 roku. Obecnie na blisko 300 serwerach w Centrum Danych Kei.pl znajduje się kilkadziesiąt tysięcy stron WWW.
  • S-NET.info

    Partner technologiczny

    S-NET to dostawca usług dla biznesu. Najważniejsze usługi świadczone przez firmę to usługi Centrum Danych, dostęp do Internetu, transmisja danych oraz tranzyt do różnych operatorów.
  • Sprint Data Center

    Partner technologiczny

    Sprint Data Center to jedyne w Polsce północno-wschodniej i jednocześnie jedno z najnowocześniejszych w kraju centrum przechowywania i przetwarzania danych.

 

Które zapytania MySQL będą szybsze ?


  • Nie możesz odpowiadać w tym temacie
2 odpowiedzi na ten temat

Które zapytania MySQL będą szybsze ?

#1 xorg

    PHP, SEO & vBulletin developer

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1589 postów
  • Skąd:Łódź

Napisany 07 wrzesień 2010 - 20:22

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)

Cytuj

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

Cytuj

UPDATE tabela SET varchar2='costamwsadzamy', bigint=jakascyfra WHERE varchar ='ciagznakow' LIMIT 1

i jeżeli nie znajdzie dopasowania to

Cytuj

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.
Funkcjonalna, sprawna wyszukiwarka mp3 muzyki klubowej :) a tu serwery CS ;)

Polecam serwery VPS.

#2 regdos

    Weteran WHT

  • Moderatorzy
  • PipPipPipPipPipPipPipPip
  • 1505 postów
  • Skąd:Poznań
  • Firma:regdos.com
  • Imię:Tomasz
  • Nazwisko:Regdos

Napisany 07 wrzesień 2010 - 20:40

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.

#3 tomiabc

    Czasami na forum

  • Użytkownicy
  • 46 postów

Napisany 07 wrzesień 2010 - 20:47

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?





1 Użytkowników czyta ten temat

0 użytkowników, 1 gości, 0 anonimowych użytkowników