โพสต์คำถามใหม่ที่ถามใน Stack Overflow เมื่อมีคนแนะนำว่านี่จะเป็นฟอรัมที่ดี
ฉันพยายามทดลองเล็ก ๆ น้อย ๆ ในการผลักดันชุดข้อมูลที่ไม่ใช่เชิงพื้นที่ แต่พอดีกับมันค่อนข้างดีและฉันกำลังค้นหาผลลัพธ์ที่ค่อนข้างไม่มั่นคง ชุดข้อมูลเป็นข้อมูลจีโนมเช่นจีโนมมนุษย์ที่เรามีภูมิภาคของดีเอ็นเอที่องค์ประกอบเช่นยีนครอบครองพิกัดเริ่มต้นและหยุดที่เฉพาะเจาะจง (แกน X ของเรา) เรามีหลายภูมิภาคของดีเอ็นเอ (โครโมโซม) ซึ่งครอบครองแกน Y เป้าหมายคือนำกลับรายการทั้งหมดที่ตัดกันสองพิกัด X ตามพิกัด Y เดียวเช่น LineString (เริ่ม 1, สิ้นสุด 2)
ทฤษฎีนี้ฟังดูดีดังนั้นฉันจึงผลักมันเข้าไปในโปรเจกต์จีโนมจาก MySQL ที่มีอยู่และสร้างโครงสร้างตารางเช่น:
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
แสดงถึงตัวระบุของเอนทิตีที่เราเข้ารหัสในตารางนี้ & external_type
เข้ารหัสแหล่งที่มาของสิ่งนี้ ทุกอย่างดูดีและฉันผลักดันข้อมูลเบื้องต้นบางส่วน (30,000 แถว) ซึ่งทำงานได้ดี เมื่อสิ่งนี้เพิ่มขึ้นมากกว่า 3 ล้านแถวเครื่องหมาย MySQL ปฏิเสธที่จะใช้ดัชนีเชิงพื้นที่และช้าลงเมื่อถูกบังคับให้ใช้ (40 วินาทีกับ 5 วินาทีโดยใช้การสแกนเต็มตาราง) เมื่อมีการเพิ่มข้อมูลเพิ่มเติมดัชนีจะเริ่มใช้งาน แต่การลงโทษประสิทธิภาพยังคงอยู่ การบังคับให้ดัชนีออกทำให้ข้อความค้นหาลดลงเหลือ 8 วินาที ข้อความค้นหาที่ฉันใช้ดูเหมือนว่า:
select count(*)
from spatial_feature
where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location);
ข้อมูลที่จะเป็นสิ่งนี้มีความหนาแน่นสูงมากตามมิติ Y (ลองคิดดูว่าคุณได้บันทึกตำแหน่งของสิ่งปลูกสร้างทุกตู้โทรศัพท์ตู้ไปรษณีย์และนกพิราบบนถนนที่ยาวมาก) ฉันได้ทำการทดสอบว่า R-Indexes ทำงานอย่างไรกับข้อมูลนี้ใน Java เช่นเดียวกับที่คนอื่น ๆ ในเขตข้อมูลได้นำไปใช้กับรูปแบบไฟล์แบนที่ประสบความสำเร็จ อย่างไรก็ตามไม่มีใครใช้กับฐานข้อมูล AFAIK ซึ่งเป็นเป้าหมายของการทดสอบนี้
มีใครบ้างที่เห็นพฤติกรรมคล้ายกันนี้เมื่อเพิ่มข้อมูลจำนวนมากลงในโมเดลเชิงพื้นที่ซึ่งไม่แตกต่างกันมากในแกนใดแกนหนึ่ง ปัญหายังคงอยู่ถ้าฉันย้อนกลับการใช้งานพิกัด ฉันกำลังใช้งานการตั้งค่าต่อไปนี้หากเป็นสาเหตุ
- MacOS 10.6.6
- MySQL 5.1.46