Jump to content
php.lv forumi

Recommended Posts

Posted

1.variants

table1:

id data1 data2 .....

1 150 260

2 160 30

3 200 400

 

1.kverijs

SELECT id FROM table1 WHERE data1>100 and data2>200

 

2.variants

table2:

id

1

2

3

 

table3:

t2id fid data

1 1 150

1 2 260

2 1 160

2 2 30

3 1 200

3 2 400

 

Tātad 2 varianti. Pirmais - visi dati glabājas vienā tabulā, otrais - dati glabājas atsevišķā tabulā (table3) un norāda uz datu īpašnieku (table2) ar t2id

Kā tagad uzrakstīt kveriju tā, lai iegūtu rezultātu kā pirmajā variantā. Respektīvi es varētu uzdot nosacījumus gan piemā veida datiem, gan otrā veida datiem un man atlasītu visus atbilstošos table2 id.

Mani interesē tieši ātrākais variants kā to var izdarīt un arī ātruma analīze.

Cik noprotu 1. kverijā ātrums būs O(log2(N)*log2(N)), ja data1 un data2 būs indeksētas ar bināro koku, varbūt arī kļūdos.

Posted

2. variants izskatās diezgan līks.

Es ņemtu pirmo variantu.

 

Ja jau gribi vēl ātrāk, tad iespējams jādala tie data1 un data2 katrs savā tabulā. Tadā gadījumā sanāks 2 kveriji: O(log2(N) + log2(N)) = O(log2(N)).

Posted (edited)

Man īsti nevajag ātrāku, man vajag universālāku, jo var nākt jauni datu lauki un gribētos tā, lai tos jaunos laukus var ērti pievienot. Bez tam katram no laukiem vēl ir savas defaultās vērtības:

 

id fid value

 

Kur fid norāda lauka id un value kādu no lauka default vērtībām.

 

 

P.S. Respektīvi, man vajag ātrāko no universālāka varianta, kurā var ērti pievienot jaunus datu laukus.

Edited by codez
Posted

Tādā gadījumā, ja jau to dataX skaits var mainīties (uzreiz tā vajadzēja teikt!), otrais variants ir pareizas.

Posted

Tikai jautājums paliek atklāts - Kāds ir ātrākais kverijs, lai dabūtu visus id, kuri atbilst dažādiem dataX nosacījumiem.

×
×
  • Create New...