Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django数据库查询速度很慢 我用Django选择了性能问题,我认为是中等大小的查询。_Python_Mysql_Django - Fatal编程技术网

Python Django数据库查询速度很慢 我用Django选择了性能问题,我认为是中等大小的查询。

Python Django数据库查询速度很慢 我用Django选择了性能问题,我认为是中等大小的查询。,python,mysql,django,Python,Mysql,Django,下面是一个直接在Mysql中运行django查询的示例 SELECT * FROM `website_datapoolposition` WHERE (`website_datapoolposition`.`data_pool_id` = 596 AND `website_datapoolposition`.`timestamp` <= '2015-01-24 23:31:33' AND `website_datapoolposition`.`timestamp` >= '2015-

下面是一个直接在Mysql中运行django查询的示例

SELECT * FROM `website_datapoolposition` WHERE (`website_datapoolposition`.`data_pool_id` = 596 AND `website_datapoolposition`.`timestamp` <= '2015-01-24 23:31:33' AND `website_datapoolposition`.`timestamp` >= '2015-01-24 19:01:30');
以下是“显示创建表”中的架构:

app_pos | CREATE TABLE `app_pos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lat` decimal(16,12) NOT NULL,
`lng` decimal(16,12) NOT NULL,
`speed` decimal(5,2) NOT NULL,
`timestamp` datetime NOT NULL,
`car_id` int(11) NOT NULL,
`total` decimal(12,2) DEFAULT NULL,
`dist` decimal(12,2),
PRIMARY KEY (`id`),
KEY `app_pos_fa16e375` (`car_id`),
KEY `app_pos_timestamp_f13fe0c76a90341_uniq` (`timestamp`),
KEY `app_pos_timestamp_343244cae95f1483_uniq` (`timestamp`),
CONSTRAINT     `app_dat_car_id_feb2a18963295a287_fk_app_car_id` FOREIGN   KEY (`car_id`) REFERENCES `app_car` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7000000 DEFAULT CHARSET=utf8

当您在MySQL cli中运行此查询时,您将获得在服务器上执行查询的时间,而不是将行传输到另一个进程(甚至机器)并从这些行构建8K重对象的时间

从SQL获取数据的最快django方法是:

data = DataPoolPosition.objects.filter(...).values_list('field1', 'field2')
您将获得迭代器,其中每一行都由元组表示

另一种选择是直接执行,但我认为与
values\u list()
选项相比,速度不会有很大提高

ADD INDEX(data_pool_id, timestamp)

(并显示CREATE TABLE,以便我们知道我们正在使用的是什么。)

如果不知道您的模式,几乎无法推断其速度较慢的原因。您可以修改查询以仅选择感兴趣的字段,也可以使用ORM作为其构建目的。您还可以向我们展示用于提取数据的django查询吗?您是否检查了django执行的SQL查询?尝试分析工具,如django-debug-toolbar。上面的select语句是我直接从django-debug-toolbar复制的语句。还添加了架构。我尝试了这两种方法,但性能变化不明显。我感到惊讶的是,通过连接游标直接执行select语句的速度是相同的。谢谢你的例子。
ADD INDEX(data_pool_id, timestamp)