我正在开发一个使用MySql数据库的Django项目。在我的项目中,其中一个方法使用两个游标连接来执行查询。它被正确关闭了。
MySql数据库有一个名为GeometryTable的表,它有两列(Geometry Datatypes)。一个是GeomPolygon
(多边形值),另一个是GeomPoint
(点数据)。我在我的python项目中编写了一个MySql查询,它返回给定多边形内的选定点和多边形。表(GeometryTable)有900万行值。
当我在MySql Workbench中运行查询时,花了几秒钟。但在项目中,返回值需要几分钟。任何人都可以帮我优化代码。感谢
方法是:
def GeometryShapes(polygon):
geom = 'POLYGON((' + ','.join(['%s %s' % v for v in polygon]) + '))'
query1 = 'SELECT GeomId, AsText(GeomPolygon)' \
' FROM GeometryTable' \
' WHERE MBRWithin(GeomPolygon, GeomFromText("%s")) AND length(GeomPolygon) < 10 million' % (geom)
query2 = 'SELECT GeomId, AsText(GeomPoint)' \
' FROM GeometryTable' \
' WHERE MBRWithin(GeomPoint, GeomFromText("%s")) AND length(GeomPoint) < 10 million' % (geom)
if query1:
cursor = connection.cursor()
cursor.execute(query1)
.....
cursor.close()
if query2:
cursor = connection.cursor()
cursor.execute(query2)
.......
cursor.close()
这里,光标执行(cursor.execute(query1)
和cursor.execute(query2)
)花费几分钟来执行查询。我已经索引了指定表中的两列。
有人可以帮我优化代码吗?