codez Posted June 18, 2008 Report Posted June 18, 2008 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.
bubu Posted June 18, 2008 Report Posted June 18, 2008 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)).
codez Posted June 18, 2008 Author Report Posted June 18, 2008 (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 June 18, 2008 by codez
bubu Posted June 18, 2008 Report Posted June 18, 2008 Tādā gadījumā, ja jau to dataX skaits var mainīties (uzreiz tā vajadzēja teikt!), otrais variants ir pareizas.
codez Posted June 18, 2008 Author Report Posted June 18, 2008 Tikai jautājums paliek atklāts - Kāds ir ātrākais kverijs, lai dabūtu visus id, kuri atbilst dažādiem dataX nosacījumiem.
Recommended Posts