1 wypros swyrzan s Postgre SQL
3 отговора
110 прегледа
1 wypros swyrzan s Postgre SQL
Iskam da izwleka 10 zapisa sled 50-ia zapis ot tablica uslowno narechena TestTable. Izpolzwam slednata zaiawka:
Select * From TestTable limit 10 offset 50.
Wsichko raboti byrzo pri tablici s okolo 20-20000 zapisa. Syshtoto waji i za tablica s 500000 zapisa, ako stoinostta na limit e malko chislo.
Ako zadam obache zaiawkata:
Select * From TestTable limit 10 offset 450000
neshtata se zabawiat ot poriadyka na 6-7 sec, koeto e mnogo. Niakawa ideia kak da uskoria tyrseneto?
Mersi predwaritelno :)
[линк]
Select * From TestTable limit 10 offset 50.
Wsichko raboti byrzo pri tablici s okolo 20-20000 zapisa. Syshtoto waji i za tablica s 500000 zapisa, ako stoinostta na limit e malko chislo.
Ako zadam obache zaiawkata:
Select * From TestTable limit 10 offset 450000
neshtata se zabawiat ot poriadyka na 6-7 sec, koeto e mnogo. Niakawa ideia kak da uskoria tyrseneto?
Mersi predwaritelno :)
[линк]
Re: 1 wypros swyrzan s Postgre SQL
точно на такава заявка малко се съмнявам да е толкова бавна, по-скоро сигурно има и ORDER BY клауза.
и при наличието на такава за съжаление OFFSET генерира (ако не се лъжа) всички редове преди желания, и заради това при голяма стойност, генерира много резултати (нампразно) и съответно забавяне
принципно, ако полето (стойността), по която подреждаш е индексирана, времето ще е по-малко от без индекс (все пак настоявам, че има ORDER BY
)
в зависимост от начина ти на връзка към базата, може да мислиш за решение с курсор, който еднократно да прави заявката и после да страницираш по него, но това не винаги е възможно
тва е, което се сещам за сега
и при наличието на такава за съжаление OFFSET генерира (ако не се лъжа) всички редове преди желания, и заради това при голяма стойност, генерира много резултати (нампразно) и съответно забавяне
принципно, ако полето (стойността), по която подреждаш е индексирана, времето ще е по-малко от без индекс (все пак настоявам, че има ORDER BY
в зависимост от начина ти на връзка към базата, може да мислиш за решение с курсор, който еднократно да прави заявката и после да страницираш по него, но това не винаги е възможно
тва е, което се сещам за сега
Re: 1 wypros swyrzan s Postgre SQL
Da, imam i Order By klauza no tia se meni w smisyl che moga da zadawam i sortirane po neindeksirani poleta:)
mersi za otgowora
[линк]
mersi za otgowora
[линк]
Re: 1 wypros swyrzan s Postgre SQL
Виж explain analyze какво ще ти каже
Току що мигрирах на 7.4 но в 7.3.4 имаше разни "особености" които могат да ти скъсат нервите. Като имам таблица от 14 млн записа и давам select на записите от днес като ги реца с dtime >= CURRENT_DATE. Немаш си прества какво мислене пада. Но dtime >= CURRNET_DATE AND dtime <= CURRENT_DATE +1 хвърчи.
Ако имаш съхранена процедура (извинявай ама се придържам към БГ терминологията) и направиш например cast на поле се оказва че прави cast на полето в цялата таблица без да се интерсува от where клаузата.
Освен това postgresql.conf е също добре да се пипне.
Та това е - търкалям 4 FreeBSD-а с PostgreSQL и мога да кажа че просто върха.
Don't ask me why I smoke - I don't know, but I drink to get drunk
Току що мигрирах на 7.4 но в 7.3.4 имаше разни "особености" които могат да ти скъсат нервите. Като имам таблица от 14 млн записа и давам select на записите от днес като ги реца с dtime >= CURRENT_DATE. Немаш си прества какво мислене пада. Но dtime >= CURRNET_DATE AND dtime <= CURRENT_DATE +1 хвърчи.
Ако имаш съхранена процедура (извинявай ама се придържам към БГ терминологията) и направиш например cast на поле се оказва че прави cast на полето в цялата таблица без да се интерсува от where клаузата.
Освен това postgresql.conf е също добре да се пипне.
Та това е - търкалям 4 FreeBSD-а с PostgreSQL и мога да кажа че просто върха.
Don't ask me why I smoke - I don't know, but I drink to get drunk