Posting ulang pertanyaan yang diajukan pada Stack Overflow ketika disarankan ini akan menjadi forum yang lebih baik.
Saya mencoba eksperimen kecil untuk mendorong kumpulan data yang tidak bersifat geo-spasial tetapi sangat cocok dan saya menemukan hasilnya agak meresahkan. Kumpulan data adalah data genomik, misalnya Genom Manusia di mana kami memiliki wilayah DNA tempat elemen-elemen seperti gen menempati koordinat awal dan berhenti yang spesifik (sumbu X kami). Kami memiliki banyak wilayah DNA (kromosom) yang menempati sumbu Y. Tujuannya adalah untuk mengembalikan semua item yang memotong dua koordinat X sepanjang koordinat Y tunggal, misalnya LineString (MULAI 1, END 2).
Teorinya kelihatannya bagus jadi saya mendorongnya ke proyek genom berbasis MySQL yang ada dan muncul dengan struktur tabel seperti:
CREATE TABLE `spatial_feature` (
`spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`external_id` int(10) unsigned NOT NULL,
`external_type` int(3) unsigned NOT NULL,
`location` geometry NOT NULL,
PRIMARY KEY (`spatial_feature_id`),
SPATIAL KEY `sf_location_idx` (`location`)
) ENGINE=MyISAM;
external_id
mewakili pengenal entitas yang telah kami enkode ke dalam tabel ini & external_type
mengkodekan sumbernya. Semuanya tampak bagus dan saya mendorong beberapa data awal (30.000 baris) yang tampaknya bekerja dengan baik. Ketika ini meningkat melewati tanda 3 juta baris, MySQL menolak untuk menggunakan indeks spasial dan lebih lambat ketika dipaksa untuk menggunakannya (40 detik vs 5 detik menggunakan pemindaian tabel penuh). Ketika lebih banyak data ditambahkan indeks mulai digunakan tetapi penalti kinerja tetap ada. Memaksa indeks mati membuat kueri menjadi 8 detik. Kueri yang saya gunakan terlihat seperti:
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
Data yang masuk ke ini sangat padat di sepanjang dimensi Y (anggaplah seperti Anda telah mencatat posisi setiap bangunan, kotak telepon, kotak pos, dan merpati di jalan yang sangat panjang). Saya telah melakukan tes tentang bagaimana R-Indexes berperilaku dengan data ini di Java dan juga orang lain di lapangan telah menerapkannya ke format flat-file dengan sukses. Namun tidak ada yang menerapkannya pada basis data AFAIK yang merupakan tujuan dari tes ini.
Adakah yang melihat perilaku serupa ketika menambahkan data dalam jumlah besar ke model spasial yang tidak terlalu berbeda di sepanjang sumbu tertentu? Masalahnya tetap ada jika saya membalikkan penggunaan koordinat. Saya menjalankan pengaturan berikut jika itu penyebabnya
- MacOS 10.6.6
- MySQL 5.1.46