Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> optymalizacja zapytania
maciu
post 18.09.2005, 10:57:41
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


Mam takie zapytanie do bazy:
  1. SELECT cms_plaintext.tid AS tid1, cms_text.tid AS tid2
  2. FROM cms_plaintext, cms_text WHERE ( cms_plaintext.hid='tytul' AND cms_plaintext.text LIKE '%".addslashes($szukaj)."%') OR ( cms_text.hid='wstep' AND cms_text.text LIKE '%".addslashes($szukaj)."%') AND cms_plaintext.tid != ".$_GET['id']." AND cms_text.tid != ".$_GET['id']."
  3. ORDER BY cms_plaintext.id DESC LIMIT 10


struktury tabel
Kod
CREATE TABLE `cms_plaintext` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `pid` int(10) unsigned NOT NULL default '0',
  `tid` int(11) unsigned NOT NULL default '0',
  `text` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id` (`id`),
  KEY `tid` (`tid`)
) ENGINE=MyISAM

Kod
CREATE TABLE `cms_text` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `pid` int(10) unsigned NOT NULL default '0',
  `tid` int(11) unsigned NOT NULL default '0',
  `text` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `id` (`id`),
  KEY `tid` (`tid`)
) ENGINE=MyISAM

plus pare innych kolumn nie mającuch tu znaczenia.

Obie tabele zawierająpo kilka tysięcy rekordów
Zapytanie to wykonywało się się średnio przez 170sekund!!!

NIe bardzo wiem, jak możnaby je zoptymalizować, macie jakieś pomysły?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
ActivePlayer
post 18.09.2005, 11:40:43
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


moze tak:
  1. SELECT cms_plaintext.tid AS tid1, cms_text.tid AS tid2
  2. FROM cms_plaintext, cms_text WHERE ( cms_plaintext.hid='tytul' AND LOCATE(".addslashes($szukaj).", cms_plaintext.text,0)>0 OR ( cms_text.hid='wstep' AND LOCATE(".addslashes($szukaj).", cms_text.text,0)>0 AND cms_plaintext.tid != ".$_GET['id']." AND cms_text.tid != ".$_GET['id']."
  3. ORDER BY cms_plaintext.id DESC LIMIT 10
Go to the top of the page
+Quote Post
maciu
post 18.09.2005, 14:29:01
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

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


niestety jest to błędne rozwiązanie, bo nie zwraca prawidłowych wyników, choć czas trwanie spadł do 150s

Edit:
Już wiem jakie jest prawidłowe rozwiązanie. Podaje kod, może się komuś przyda
  1. (SELECT tid
  2. FROM cms_plaintext WHERE tid <> ".$_GET['id']." AND hid='tytul' AND text LIKE '%".addslashes($szukaj)."%')
  3. UNION DISTINCT (SELECT tid
  4. FROM cms_text WHERE tid <> ".$_GET['id']." AND hid='wstep' AND text LIKE '%".addslashes($szukaj)."%')


Ten post edytował maciu 18.09.2005, 16:11:25
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 08:50