จะให้ฉันใช้กลุ่มฟังก์ชันเป็น spatial ร่วมกับเพื่อปรับปรุงโต๊ะใน MySQL?

0

คำถาม

ฉันพยายามที่จะปรับปรุงการรายได้ทั้งหมดสำหรับห้องทำงานยังตำแหน่งต่างกัน geographies. ที่ geographies ถูกกำหนดโดยวนและรูปหลายเหลี่ยมซึ่งทั้งคู่อยู่ในรูปร่างรูปร่างคอลัมน์

ตอนที่ฉันหนีไปกับการค้นหาข้างล่าง MySQL โย"R_INVALID_GROUP_FUNC_USE:ไม่ถูกต้องใช้ของกลุ่มฟังก์ชัน"

ฉันพยายามปรับเปลี่ยน เรื่ องตอบ,แต่ฉันไม่สามารถคิดออกจากตรรกะกับเงื่อนไขเซลร่วมกั geospatial ข้อมูลของมันไม่ง่ายอย่างเพิ่มเป็น subquery กับที่เงื่อนไขว่า. (หรือ?)

สำหรับคอนเท็กซ์ฉันมีเรื่อง 350 geographies และ 150,000 ออฟฟิศ

UPDATE
    shapes s
    LEFT JOIN offices ON (
        CASE
            WHEN s.type = 'circle' THEN ST_Distance_Sphere(o.coords, s.shape) < s.radius
            ELSE ST_CONTAINS(s.shape, o.coords)
        END
    )
SET
    s.totalRevenue = SUM(o.revenue);

ปรับปรุง:

มันจะได้ผลแต่มันช้าลงและสับสน มีเร็ว/มากก concise ทาง?

UPDATE
    shapes s
    LEFT JOIN (
        SELECT
            t.shape_id,
            SUM(g.revenue) revenue
        FROM
            shapes t
            LEFT JOIN offices o ON (
                CASE
                    WHEN t.type = 'circle' THEN ST_Distance_Sphere(o.coords, t.shape) < t.radius
                    ELSE ST_CONTAINS(t.shape, o.coords)
                END
            )
        GROUP BY
            t.shape_id
    ) b ON s.shape_id = b.shape_id
SET
    s.totalRevenue = b.revenue;
case left-join mysql spatial-query
2021-11-17 03:21:30
1

คำตอบที่ดีที่สุด

0

ฉันคิดว่าความเร็วจะช่วยโดยแยกกันออกเป็นสอง UPDATEs:

... WHERE t.type = 'circle' 
      AND ST_Distance_Sphere ...

แล้ว

... WHERE t.type != 'circle' 
      AND ST_CONCAINS ...

แล้วดูว่าผลลัพธ์จาก SQLs สามารถเป็นประยุกต์@item text character set.

เพื่อให้ตรวจสอบกับการค้นหาได้โปรดแยก subquery b และเห็นว่าถ้าก้อนข้อมูลของเวลาในทำอย่างนั้น SELECT (ซึ่งตรงข้ามกับเวลาทำ UPDATE).

โปรดกำหนด SHOW CREATE TABLE สำหรับแต่ละโต๊ะแล้ว EXPLAIN สำหรับทั้งสองคน UPDATE(s) และแยกตัวออกมา SELECT(s). เป็นจำนวนของเงื่อนงำอาจจะมาจากนั้น

2021-11-17 20:30:29

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่