blackmamba

Statistika

Pridružen/a:
04 mar 2008, 15:36
Zadnjič aktiven:
26 nov 2025, 11:23
Prispevki:
Teme:
58 | Vse teme
392
25
11

Podpis

#4

zmagovalni query: 0.06s


SELECT n.title, n.news_id, n.short, n.picture, n.youtube, n.audio, n.gallery_id, n.inserted
FROM news AS n
FORCE INDEX ( priority )
JOIN news2category AS n2c
FORCE INDEX FOR JOIN (
news_id
) ON ( n2c.news_id = n.news_id )
WHERE n2c.category_id = '5'
AND n.inserted < NOW( )
ORDER BY n.priority DESC , n.inserted DESC
LIMIT 0 , 21

fatg, kapo dol :)


všeč(0) ni všeč(0) spam(0)
#3

Še nisem videl tvojega posta, ko sem odkril FORCE INDEX in USE INDEX.



LEFT sem odstranil, ne opazim razlike.

NOW() je potreben, ker so novice napisane za v naprej.

Najbolje se obnese, če forcam(ali USE) index na priority. Sedaj se izvede v 0.1~0.2 sekunde !



Hvala za odgovor!


všeč(0) ni všeč(0) spam(0)
#2

FORCE INDEX(inserted, priority) je spravlo zadevo na 0.2 ~ 0.4 sekunde


všeč(1) ni všeč(0) spam(0)
#

Kako pohitriti poizvedbo?


Showing rows 0 - 20 (21 total, Query took 1.5251 sec)

SELECT n.title, n.news_id, n.short, n.picture, n.youtube, n.audio, n.gallery_id, n.inserted
FROM news AS n
LEFT JOIN news2category AS n2c ON ( n2c.news_id = n.news_id )
WHERE n2c.category_id = '5'
AND n.inserted < NOW( )
ORDER BY n.priority DESC , n.inserted DESC
LIMIT 0 , 21

Index je nastavljen na fieldih: news_id, priotity, inserted



V povezovalni tabeli je vse indeksirano.



Novic je v bazi cca 30000



Zadevo upočasni ORDER BY, brez sortiranja dobim rezultat v 0.00x sekundah.



explain:



HELP :)


všeč(0) ni všeč(0) spam(0)
#4

To ti je napisalo zato, ker imaš na strežniku php4. Rabiš pa php5.

Spusti besedo "public" pred function pa bi moralo bit v redu.


všeč(0) ni všeč(0) spam(0)
#3

V mysql-u lahko nastavljaš timezone

npr: SET time_zone = '-8:00';


všeč(0) ni všeč(0) spam(0)
#1

Če si spremenil čas na serverju, mysql-a pa nisi reštartal, zna bit to problem.


všeč(0) ni všeč(0) spam(0)
#5

Testirano na 140.000 zapisih:


ORDER BY RAND() LIMIT 10

~ 1.8 sekunde



Spodnji primer pa 0.28 sekunde.


SELECT @bla :=1 / count(*) * 10
FROM tabela;

SELECT * FROM tabela
WHERE rand( ) < @bla
ORDER BY rand( )
LIMIT 10 ;
všeč(1) ni všeč(0) spam(0)
#3

Mogoče tole pomaga:


$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `table` LIMIT $offset, 1 " );

pa še članek, kjer sem to izluščil :) KLIK


všeč(0) ni všeč(0) spam(0)
#6

Ko boš to spremenil, moraš ponovno vnest besedila s Č-ji, ker vprašaji se ne bojo sami zamenjali


všeč(1) ni všeč(0) spam(0)