1 wypros swyrzan s Postgre SQL

3 отговора 110 прегледа
#1

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 :)

[линк]
Отговор
в отговор на FrancescoTotti #2

Re: 1 wypros swyrzan s Postgre SQL

точно на такава заявка малко се съмнявам да е толкова бавна, по-скоро сигурно има и ORDER BY клауза.

и при наличието на такава за съжаление OFFSET генерира (ако не се лъжа) всички редове преди желания, и заради това при голяма стойност, генерира много резултати (нампразно) и съответно забавяне

принципно, ако полето (стойността), по която подреждаш е индексирана, времето ще е по-малко от без индекс (все пак настоявам, че има ORDER BY )

в зависимост от начина ти на връзка към базата, може да мислиш за решение с курсор, който еднократно да прави заявката и после да страницираш по него, но това не винаги е възможно

тва е, което се сещам за сега

Отговор
в отговор на phpGuru #3

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

[линк]
Отговор
в отговор на FrancescoTotti #4

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
Отговор