mysql - Django 查询和存储过程(MySQL)之间的性能差异?

标签 mysql sql django stored-procedures

我想使用一个查询来计算距离一个点 D 距离的点(即地理定位的东西),所以查询有点复杂:

        DELIMITER //

    CREATE PROCEDURE geodist (IN m_lat double, IN m_lng double, IN dist int, IN lim int)
    BEGIN
    DECLARE lon1 double; DECLARE lon2 double;
    DECLARE lat1 double; DECLARE lat2 double;

    -- calculate lon lat for the rectangle
    SET lon1 = m_lon-dist/abs(cos(radians(m_lat))*69);
    SET lon2 = m_lon+dist/abs(cos(radians(m_lat))*69);
    SET lat1 = m_lat-(dist/69); 
    SET lat2 = m_lat+(dist/69);

    -- run query;
    SELECT post.id, 3956 * 2 * ASIN(SQRT( POWER(SIN((m_lat - post.geo_lat) * pi()/180 / 2), 2) +COS(m_lat * pi()/180) * COS(post.geo_lat * pi()/180) *POWER(SIN((m_lng - post.geo_lng) * pi()/180 / 2), 2) )) as distance 
    FROM post_post as post
    WHERE
    post.geo_lng BETWEEN lon1 AND lon2
    AND post.geo_lat BETWEEN lat1 AND lat2
    HAVING distance < dist ORDER BY Distance limit lim;

    END //

上面是我的存储过程。因为我将使用它来处理数千甚至数百万行数据,所以我想知道在存储过程上使用 django 查询对性能有何影响?我意识到 django 不支持存储过程,所以这就是我希望避免使用存储过程的原因。但是,查询不会在数据库中编译,计算必须在 python 中完成...等等。django 查询和从 django 调用的存储过程在性能上有什么区别?

最佳答案

[编辑] 与在 Python 中计算所有内容相比,如果您使用专门的数据库函数(例如 Postgis 或 Mysql Spatial Extensions 中的函数),性能将得到巨大提升。

看看geodjango ,设置有点痛苦,但它拥有您可能需要的一切地理定位。

如果 geodjango 太多了,你总是可以求助于 raw SQL对于这个特定的查询。

关于mysql - Django 查询和存储过程(MySQL)之间的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784149/

相关文章:

python - 如何在django中设置主键的初始值

mysql order by with union 似乎不起作用

mysql - 从 txt 加载重复年份的数据,仅包含天和月

MySQL "unknown"

sql - Power Pivot 查询中的动态参数

python - Django REST 框架元组被解释为字符串?

mysql - 如何在字符串中匹配下划线 - MYSQL

c++ - ASCII 艺术 - 按亮度级别对 ASCII 字符数组进行排序 (C/C++)

sql - 创建Oracle物化 View ,每5分钟刷新一次使用物化 View 日志

django - 记录列表未在 Django REST 框架中获取更新的记录..?