Forum Delphi.cz

Databáze => Ostatní DB => Téma založeno: František 09-07-2016, 12:24:27

Název: Riešiť dĺžku varchar?
Přispěvatel: František 09-07-2016, 12:24:27
mam DB s cca 250.000 záznamov (SQlite)
1-5000 má dĺžku varchar je 249.000 záznamov
5.000-10.000 má 975 záznamov
10.000-25.000 má 25 záznamov

má to význam nejako deliť? môže to mať vplyv na výkon?
 alebo nechať vsetko na 25.000
orezať to nechcem....
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: Stanislav Hruška 09-07-2016, 13:15:31
Ak nie je SQLite navrhnutá debilne, čo naozaj nepredpokladám :D , tak sa pamäť pre jednotlivé záznamy a polia obsadzuje dynamicky. Podľa skutočnej dĺžky a nie definície. Deliť to kvôli tomu teda nemá význam.
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: František 09-07-2016, 13:41:25
preco to ma firebird obmedzene...na index
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: pepak 09-07-2016, 17:39:27
Viz původní dotaz (http://forum.delphi.cz/index.php/topic,15317.msg93071.html#msg93071).
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: Daniel_Andrascik 10-07-2016, 15:38:06
V tomto vlakne sme hodne riesili ake datove typy vlastne SQLite ma http://forum.delphi.cz/index.php/topic,15289.0.html (http://forum.delphi.cz/index.php/topic,15289.0.html). Vyslo nam z toho ze je viac menej uplne jedno ako si nadefinujes datovy typ stlpca, SQLite aj tak zozerie nakoniec vsetko. Ale pre poriadok SQLite ma pre texty len jeden datovy typ a tym je TEXT, akykolvek Varchar s akoukolvek dlzkou aj tak interne sqlite bude brat ako TEXT s dynamickou dlzkou. Viac menej si daj datovy typ taky, aby tebe, pripadne ostatnym vyvojarom pracujucim na projekte pre poriadok jednoznacne napovedal ze o co ide, SQLite je v tomto prasak a je mu to viac menej jedno a text ulozis aj do stlpca typu REAL :o

Pre optimalizaciu by som si snad len skontroloval pomocou tohto selectu, ci mam v kazdom riadku typ TEXT a nemiesa mi do toho BLOB pripadne nejake ine ulozne triedy:

Kód: [Vybrat]
SELECT typeof(column) FROM Table;
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: geby 20-07-2016, 14:16:17
Ja bych nerekl, ze je prasak. Naopak, pro pouziti, pro ktere je Sqlite zamyslene, je to zajimava vlastnost, ze jeden sloupec muze obsahovat ruzne druhy dat. Nicmene bych k tomu jeste doplnil:

- Ano, Sqlite vzdy uklada data tak, aby byl usporny. Text zabira opravdu jen tolik, kolik je dlouhy. Dokonce treba Integer zabira od 1 do 8 bytu, podle toho, jak je ukladane cislo prave velike. Atd.

- Ackoliv by se mohlo zdat, ze definice typu sloupcu je u SQlite jen na paradu, neni tomu tak! Deklarace sloupce tabulky svuj vyznam ma.
Napriklad kdyz mas sloupec typu TEXT, tak i kdyz do nej ulozis cislo, bude vzdy ukladano jako text. Provede se konverze.
Kdyz mas ale sloupce jako ciselny, pak se zase pro zmenu text pokousi prevest na odpovidajici ciselny typ. Az kdyz konverze selze, je to ulozeno fyzicky jako text.

- z toho vyplyva, ze pokud se chces vyhnout zbytecnym konverzim, a zaroven ukladat data efektivne, je dobre pouzivat spravne datove typy. Nicmene pokud k databazi pristupujes pres nejake ty univerzalni frameworky, tak tam se odehrava tolik nadbytecnych operaci, ze je to skoro jedno. Na druhou stranu, pokud pristupujes pres nejaky lehky wrapper, tak tam dokazes pocitit zrychleni.  ;)
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: Daniel_Andrascik 22-07-2016, 12:49:59
Naprosto suhlasim. SQLite pouzivam masivne a aj do buducna pouzivat budem. Ale vacsinou skor ako datovy sklad, na logy, na trendy atd a pripadne na nejaku tu jednoduchu datovu strukturu, na ulozenie nastaveni, uzivatelov a pristupov. Ale na komplexne riesenie ukladania relacnych dat a datovych struktur by som ju uz asi nepouzil.

Prasakom som SQLite nazval preto pretoze do stlpca typu Integer dokazem ulozit Ustavu slovenskej republiky a ono to po mne vobec ale vobec nestekne. Toto moze v pripade komplikovanej datovej struktury byt velkym bezpecnostnym rizikom. Ale inac ma SQLite na elementarne jednoduche veci velke a prinosne vyuzitie.
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: 96387 19-06-2017, 22:06:48
Teeeda, vy jste opravdu schopni ukladat indexovany sloupec typu integer jako text jen proto aby v DBMS zabiral o neco mene a v engine byl zpracovavany jako text nehlede na to jak jen engine zpracovava? :o
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: geby 19-06-2017, 23:12:21
Teeeeda, ty jsi opravdu schopny rozjizdet flame i v rok starem vlakne? Borec!  :o
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: 96392 22-06-2017, 22:38:31
Teeeeda, ty jsi opravdu schopny rozjizdet flame i v rok starem vlakne? Borec!  :o

Jsem ;D Od toho ma SQLite datove typy. Pouzivej to co nabizi DBMS a pokud mas abstrakci pro vice druhu (trebas FireDAC), venuj se ji. Ne tomu jak se data interne ukladaji. Pokud chces pracovat jen s jednim druhem DBMS, sahni po nejakem low level reseni, ale zase jen na urovni co DBMS nabizi. Proc jinak by se nekdo snazil jich v kteremkoli DBMS definovat tolik? Jednoduse by mohli podle ukladanych hodnot rozhodnout jak bude sloupec definovany, tj. dokud budou vsechny zaznamy obsahovat integer, datovy typ bude integer do doby nez nekdo ulozi typ jiny (pak by mohli datovy typ sloupce automaticky zmenit a data preindexovat, pokud by bylo treba).
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: geby 23-06-2017, 21:38:43
Trpis neodolatelnou touhou odpovídat na otázky, které nikdo ne položil?
Název: Re:Riešiť dĺžku varchar?
Přispěvatel: 96402 24-06-2017, 17:16:31
Netrpim. Ja jen obhajil svuj "flame" ::) Jsi to ty kdo vnasi kritiku k tomu ze nekdo v diskuzi vlozi prispevek do rok stareho vlakna. Pak si tu zaridte, aby nebylo mozne do tak stareho vlakna prispivat. Nebo me zabanujte. Je to prece svobodna diskuze. Bohuzel ne profesionalni, jak se zda :-\ Cesi byli a jsou holt takovi!

Nebo vecne popis, co jsem nepochopil nebo napsal spatne. Dokazu uznat chybu ;)