Arsip: help: SQL command(s) utk scanning data
more 18 years ago
mat_koder
saya punya data dalam tabel , untuk sederhananya adalah WAKTu & BERAT.
data ini didapetin dari alat pengukut berat yg data dibaca dan disimpan setiap menit.
Saya ingin menentukan kapan alat ini mulai mengukur ( yg ditunjukkan dengan nilai BERAT yg berubah dari 0 menjadi lebih besar dari 0 ) dan kapan alat berhenti mengukur ( yg ditunjukkan oleh nilai BERAT yg berubah dari sesuatu yg lebih besar dari 0 menjadi nol).
Tentunya ini dapat dilakukan sengan sequential scanning dari tabel tsb , tapi prosesnya lamaaaa sekali - data yg di-scan bisa ratusan ribu record.
Ada ngga yah cara yg lebih cepat dengan menggunakan perintah SQL ?.
Asumsikan DB servernya adalah general SQL server ( bisa FB/MYSQL/MSSQL).
TIA
more 18 years ago
mat_koder
oh ya... tambahan
beban berat ( benda yg diukur ) berubah ubah setiap waktu ( berkali-kali ).
yg saya inginkan adalah mengetahui kapan masing-masing beban mulai diukur ( beban ditaruh ke alat pengukur) dan berhenti diukur ( beban dilepaskan dari alat pengukur) .
TIA
more 18 years ago
_lmz
Strategi yang lebih baik dari seq. scan berarti menggunakan index?
coba:
ambil dulu waktu di mana beratnya 0
select waktu from ukuran where berat = 0
misal hasil dari select di atas ada dalam v_waktu_0
lalu ambil waktu di sekitarnya dan periksa secara manual di aplikasi anda apakah waktu itu termasuk awal / akhir pengukuran
select u.waktu, u.berat from ukuran u, v_waktu_0 where
u.waktu between (v_waktu_0.waktu - toleransi) and (v_waktu_0.waktu + toleransi)
Seharusnya select di atas menggunakan index untuk waktu dan berat, juga hasil akhirnya lebih sedikit jumlah barisnya, tapi apakah nanti querynya bisa berjalan lebih cepat masih menjadi tanda tanya, terutama karena query ini menggunakan join... Kalau tidak menggunakan join mungkin bisa dicari waktu di mana beratnya mendekati 0 (diantara 0 - toleransi dan 0 + toleransi). Dengan asumsi toleransi cukup kecil sehingga tidak akan tercapai di dalam pengukuran normal (saat stabil), tapi hanya pada saat transisi dari dan ke 0.
mungkin ini lebih mudah jika database anda memiliki fungsi seperti LAG() dan LEAD() untuk melihat nilai di depan dan di belakang baris yang sekarang. Dengan itu maka awal pengukuran dapat didefinisikan sebagai waktu di mana beratnya 0 tapi waktu sesudahnya beratnya > 0. Juga akhir pengukuran adalah waktu di mana beratnya 0 tapi waktu sebelumnya beratnya < 0.
more 18 years ago
simba
Kadang multiple simple query (jauh) lebih cepat daripada single complex query. Saya sering menggunakan teknik ini untuk mempercepat proses pencarian/pencocokan. Apalagi kalo sebagian tugas yg sederhana secara logic tapi jadi beban di db dapat dibantu dilakukan di client. Contoh kasus yg pernah saya hadapi serupa dgn masalah di atas dan saya selesaikan dgn teknik ini. Pencarian berdasarkan waktu dgn melibatkan beberapa tabel, dgn tabel utama berisi lebih dari 2 juta record, prosesnya hampir2 seketika jika menggunakan 6 kali query sederhana yg simultan dan dibantu di client dgn algoritma sederhana, dibanding dgn 1 kali query kompleks yg membutuhkan waktu dalam orde detik (3-5 detik). Tentu saja dgn asumsi desain struktur db juga udah di-optimized seperti yg disampaikan lmz.
more 18 years ago
DelphiExpert
Kalau RDBM yg digunakan support events (misal: Interbase/Firebird), coba deh pake cara ini.
Commonly event yg di trigger di sisi client akan di separate dlm sub thread (multithread call).
Kombinasikan dng object kecil (cache) di sisi client yg meng-identifikasi id record utk mempercepat pengeksekusian method
(mulai dan selesai) mengukur terhadap object/record tersebut (sender)
Kalo ngga' mau sequential, ato pake index sekalipun, mungkin cara ini bisa dicoba ;)
more 18 years ago
mat_koder
trims atas respon temen2 skalian.
solusi yg skarang saya pake adalah looping perintah SQL.
Kayanya ngga ada yag single SQL command utk kasus semacam ini.
yg skarang saya gunakan ( Firebird):
Query='select first 1 WAKTU from TABLE where BERAT=0 order by WAKTU';
waktu1 = Query.FieldByName(WAKTU).
if not Query.Eof
begin
while not Query.Eof do
begin
Query := 'select first 1 WAKTU from TABLE where WAKTU > waktu1 and BERAT > 0 order by WAKTU'
mulai := Query.FieldByName(WAKTU)
Query := 'select first 1 WAKTU from TABLE where WAKTU > mulai and BERAT = 0 order by WAKTU'
selesai := Query.FieldByName(WAKTU);
waktu1 := selesai
end
end;
tentunya field WAKTU haris di-index.
pertanyaan saya berikutnya
1. apa perlu field BERAT juga di-index ?
2. apa clause 'order by WAKTU' diperlukan ?
TIA
more ...
- Pages:
- 1
reply |
Report Obsolete
AI Forward
🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now:
https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 5 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 5 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 13 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 13 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 13 years ago
Random Topic
- Audio Reccorder
by w11 in Lain-lain more 15 years ago - fungsi OnChange pada TDBLookupComboBox?
by o-dad in Tip n Trik Pemrograman more 16 years ago - Ultah @Delphi Expert
by saysansay in OOT more 18 years ago - 'Rekayasa Object-object di Delphi' - @www.benpinte
by DelphiExpert in Form Enhancement & Graphical Controls more 18 years ago - cari function
by novicute in Games more 19 years ago - menampilkan data di string grid
by krizzna in Tip n Trik Pemrograman more 19 years ago - Listview & Error Handle
by ayocool in Hal umum tentang Pascal Indonesia more 19 years ago - tanya bikin treeview
by dauf in Tip n Trik Pemrograman more 18 years ago - Tanya Lagi Perhitungan sub report di Crystal Report
by onsir in MySQL more 18 years ago - Merge cell report excel dari delphi
by yudex86 in Reporting more 17 years ago