Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Prośba o pomoc w optymalizacji pytania MySQL, SELECT
mosky
post 23.11.2005, 12:34:38
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.12.2004

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


Witam.

Mam takie pytanie do mysql:

  1. SELECT id, tytul, klucz, zajawka
  2. FROM tabela_aktualnosci WHERE akcept = '1' AND (publ_start = '0000-00-00 00:00:00' OR publ_start < '$data') AND (publ_koniec = '0000-00-00 00:00:00' OR publ_koniec > '$data')
  3. ORDER BY id DESC LIMIT 0, 1


Prosze uzywac odpowiedniego bbcode
poprawiam
---
nospor

Czy można go poprawić by było wydajniejsze?

Czas generowania takiego pytania w tabeli gdzie jest około 500 rekordów to 0,02 S - więc nie wiem czy to dużo? (wydaje mi się że nie)

Ten post edytował mosky 23.11.2005, 14:43:26
Go to the top of the page
+Quote Post
SongoQ
post 23.11.2005, 15:05:55
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


- index na id
- index na publ_start i publ_koniec
- wystrzegaj sie OR
- konwersja dat


--------------------
Go to the top of the page
+Quote Post
mosky
post 23.11.2005, 17:28:04
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.12.2004

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


Cytat(SongoQ @ 2005-11-23 14:05:55)
- index na id
- index na publ_start i publ_koniec
- wystrzegaj sie OR
- konwersja dat

Hmmm.
Mam taką sktrukturę tabeli:

  1. CREATE TABLE `tabelka_aktualnosci` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  4. `data_zmiany` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  5. `autor` char(2) NOT NULL DEFAULT '',
  6. `tytul` varchar(50) NOT NULL DEFAULT '',
  7. `zajawka` text NOT NULL,
  8. `tresc` text NOT NULL,
  9. `keywords` varchar(250) NOT NULL DEFAULT '',
  10. `akcept` tinyint(1) NOT NULL DEFAULT '0',
  11. `publ_start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  12. `publ_koniec` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  13. `klucz` varchar(250) NOT NULL DEFAULT '',
  14. PRIMARY KEY (`id`),
  15. UNIQUE KEY `id` (`id`),
  16. FULLTEXT KEY `tresc` (`tresc`,`zajawka`,`tytul`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=latin2;


Na id klucz mam.
Co mi da, że założę klucz na publ_start i publ_koniec?
Konwersję dat - domyślam się że na UNIX_TIMESTAMP - raczej sobie odpuszczę. Za dużo roboty. Źle zrobiłem że nie zrobiłem tego na początku. sad.gif ale cóż - teraz już mam CMS + bazę (kilkaset rekordów) i nie bardzo mam pomysł jakby to bezboleśnie przekonwertować.
Go to the top of the page
+Quote Post
SongoQ
post 23.11.2005, 17:45:05
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Co mi da, że założę klucz na publ_start i publ_koniec?

Optymalizator bedzie szukal po indeksie i wybierze odpowiednie rekordy.

A mam pytanie co mowi explain plan?


--------------------
Go to the top of the page
+Quote Post
mosky
post 23.11.2005, 17:54:55
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.12.2004

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


Cytat(SongoQ @ 2005-11-23 16:45:05)
A mam pytanie co mowi explain plan?

Nie mam pojęcia blink.gif

Explain plan to to?
Go to the top of the page
+Quote Post
Sh4dow
post 24.11.2005, 10:45:12
Post #6





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


raczej mu chodzilo o cos takiego
  1. EXPLAIN SELECT id, tytul, klucz, zajawka
  2. FROM tabela_aktualnosci WHERE akcept = '1' AND (publ_start = '0000-00-00 00:00:00' OR publ_start < '$data') AND (publ_koniec = '0000-00-00 00:00:00' OR publ_koniec > '$data')
  3. ORDER BY id DESC LIMIT 0, 1

Wykonaj to i pokaz co pokaze smile.gif)


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
mosky
post 25.11.2005, 09:08:44
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 15.12.2004

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


Odpowiedź wygląda następująco:


id 1 : 1
select_type : SIMPLE
table : tabela_aktualnosci
type : index
possible_keys : NULL
key : PRIMARY
key_len : 4
ref : NULL
rows : 83
Extra : Using where
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: 16.06.2025 - 00:02