Autor Téma: Riešiť dĺžku varchar?  (Přečteno 1768 krát)

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 244
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Riešiť dĺžku varchar?
« kdy: 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....

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2719
  • Karma: 26
    • Verze Delphi: XE7 professional
Re:Riešiť dĺžku varchar?
« Odpověď #1 kdy: 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.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Plnoletý
  • ***
  • Příspěvků: 244
  • Karma: 1
    • Verze Delphi: XE5, 10.1 starter (BDS2006, XE)
Re:Riešiť dĺžku varchar?
« Odpověď #2 kdy: 09-07-2016, 13:41:25 »
preco to ma firebird obmedzene...na index

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1265
  • Karma: 28
    • Pepak.net
Re:Riešiť dĺžku varchar?
« Odpověď #3 kdy: 09-07-2016, 17:39:27 »

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 402
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:Riešiť dĺžku varchar?
« Odpověď #4 kdy: 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. 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;

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 161
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Riešiť dĺžku varchar?
« Odpověď #5 kdy: 20-07-2016, 14:16:17 »
Ok
Rated 1 time
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.  ;)

Offline Daniel_Andrascik

  • Hrdina
  • ****
  • Příspěvků: 402
  • Karma: 15
    • Verze Delphi: D2007, XE3
Re:Riešiť dĺžku varchar?
« Odpověď #6 kdy: 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.

Offline Delfin

  • Nováček
  • *
  • Příspěvků: 30
  • Karma: 0
Re:Riešiť dĺžku varchar?
« Odpověď #7 kdy: 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

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 161
  • Karma: 13
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Riešiť dĺžku varchar?
« Odpověď #8 kdy: 19-06-2017, 23:12:21 »
Good
Rated 2 times
Teeeeda, ty jsi opravdu schopny rozjizdet flame i v rok starem vlakne? Borec!  :o

Offline Delfin

  • Nováček
  • *
  • Příspěvků: 30
  • Karma: 0
Re:Riešiť dĺžku varchar?
« Odpověď #9 kdy: 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).
« Poslední změna: 22-06-2017, 22:40:06 od Delfin »

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):