Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Access - Query - brzina, memorija???

[es] :: Access :: Access - Query - brzina, memorija???

[ Pregleda: 2999 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mojsony
Beograd

Član broj: 7016
Poruke: 9
80.93.225.*



Profil

icon Access - Query - brzina, memorija???10.03.2004. u 10:10 - pre 244 meseci
Dakle,

u Access bazi imam preko 100000 slogova. Da bi se neki upit izvrsi potrebno mu je oko 20-30 sekundi, (normalno?) nekad i duze. Najgore je sto on mnogo trosi memorije cak i do 200 mb. (normalno?)
Upit je "select * from naziv_tabele".
Zbunjuje me to sto gledanjem te tabele u accessu memorija nije zauzeta vise od 30 Mb i ne traje duze od 4 sek!?

Pitanje:

Da li mu se nekako moze ograniciti memorija koju koristi, i kako da se ubrza?

p.s.

Programski jezik je Delphi 6.0, a u pitanju je tadoquery.

Hvala.
Svaki Ciga svoga konja hvali
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Access - Query - brzina, memorija???10.03.2004. u 10:26 - pre 244 meseci
Zašto bi vršio upit:
SELECT * FROM naziv_tabele;
koji će da onda selektuje svih 100,000 zapisa. Šta ćeš sa toliko zapisa? Da ih prikažeš najednom, teško da će stati na ekran, a da ih printaš, nema potrebe da toliko zapisa dovlačiš "iz cuga", zar ne?

Da li dolazi u obzir mogućnost da ograničiš odabir korišćenjem WHERE klauze:

SELECT * FROM naziv_tabele WHERE uslov;

Acess verovatno čita samo one zapise koje ti onda i prikaže na ekranu (npr. 50 zapisa), a onda kako se ti pomeraš gore-dole kroz tabelu, on čita i prikazuje potrebne zapise. Pri tom Access verovatno nikad ne čita više od 50-tak zapisa, jer više ne može ni da ti prikaže na ekranu, a to možeš i ti da uradiš upotrebom WHERE. Dobro, možda Access čita nešto više zapisa (npr. 1000) kako bi ubrzao pregled istih, ali skoro je sigurno da ne čita sve zapise. Zamisli da imaš tabelu sa još više zapisa.. gde bi to sve stalo u memoriji?

Pozdrav

Commercial-Free !!!
 
Odgovor na temu

Simke
Marko Simic
Sandfield Associates (Solution
Developer)
Novi Zeland

Član broj: 1158
Poruke: 751
*.avenue.co.nz

ICQ: 71578686
Sajt: www.sandfield.co.nz


Profil

icon Re: Access - Query - brzina, memorija???11.03.2004. u 00:32 - pre 244 meseci
Takodje ako stavis indexe na polja na kojima cesto radis search (WHERE), ubrzaces query.
All beer is good. Some beer is better.
 
Odgovor na temu

vbraca
Bratislav Velickovic
Administrator informacionih sistema
Kragujevac

Član broj: 4956
Poruke: 230
*.245.EUnet.yu

Sajt: velickovic.net


Profil

icon Re: Access - Query - brzina, memorija???11.03.2004. u 15:03 - pre 244 meseci
Citat:
degojs:
Acess verovatno čita samo one zapise koje ti onda i prikaže na ekranu (npr. 50 zapisa), a onda kako se ti pomeraš gore-dole kroz tabelu, on čita i prikazuje potrebne zapise. Pri tom Access verovatno nikad ne čita više od 50-tak zapisa, jer više ne može ni da ti prikaže na ekranu, a to možeš i ti da uradiš upotrebom WHERE. Dobro, možda Access čita nešto više zapisa (npr. 1000) kako bi ubrzao pregled istih, ali skoro je sigurno da ne čita sve zapise. Zamisli da imaš tabelu sa još više zapisa.. gde bi to sve stalo u memoriji?


Nazalost sudeci po tekstovima, kao i licnom iskustvu, koji sa bave ovakvim problemima Access radi upravo suprotnu stvar - ono sto se nalazi u upitu Access prvo ucita (cini mi se da delimicno kesira podatke) pa tek onda obradjuje. Konkretno kod ovog upita - prvo pokretanje bi trebalo da bude primetno sporije od narednog (naravno ako probas dva puta da pokrenes isti upit zaredom).
Sigurno ste primetili i da kod podizanja aplikacije koja podatke cita sa mreze Access-u treba dosta vremena da se podigne - zapravo treba mu vremena da sa mreze prvo procita sve tabele i podatke u njima pa da Vam tek onda dozvoli pristup aplikaciji.
Naravno ako ti je brzina bitna za rad aplikacije sa velikom koicinom podataka uvek ti ostaje mogucnost da koristis neku drugu platformu za razvoj ...

Pozdrav,
Bratislav Velickovic
hhtp://blog.velickovic.net
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Access - Query - brzina, memorija???11.03.2004. u 18:00 - pre 244 meseci
Čemu onda služe indeksi u Access-u?

Konkretno, ako se uzmu dve tabele (u mom primeru 450,000 zapisa) koje su sa istovetnim podacima:

1) prva tabela
AutoID - primarni ključ, index
T1 - index
T2
2) druga tabela:
AutoID - primarni ključ, index
T1
T2

Ako se naprave dva upita SELECT * FROM ... WHERE T1=vrednost;

razlika u brzini je više nego očigledna (prvi slučaj je rezultat dao odmah, a drugi nakon 5 sekundi), a i potrošnja memorije takođe (prvi slučaj oko 2 MB, drugi oko 15 MB). Ništa se nije promenilo ni prilikom ponovnog upita na lokalnoj mašini. Ako je baza na serveru u mreži, prvi upit ponovo ide gotovo trenutno, a drugi je još sporiji (ovde jeste slučaj da je brži ponovljeni upit, ali DALEKO sporije nego kada je polje indeksirano). Sa memorijom opet isto: 2:15.

Što se samog pregleda tiče, ovde si u pravu: radi se verovatno o tome da Access učitava čitavu (ili dobar deo) tabelu ako u memoriji ima dovoljno mesta, što je ovde i bio slučaj. Bilo bi interesantno videti kako bi reagovao kada bi server imao npr. 128 MB RAMa, a baza bila recimo 500 MB. U ovom slučaju baza je oko 70 MB. Svejedno, zauzeće memorije i ovde je bilo značajno manje nego što je veličina same tabele.

Moj zaključak može samo da bude: WHERE i index.
Commercial-Free !!!
 
Odgovor na temu

[es] :: Access :: Access - Query - brzina, memorija???

[ Pregleda: 2999 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.