python-MySQLdb数据超过200万检索过慢的原因分析
来源:互联网 发布:网络前端前景咋么样 编辑:程序博客网 时间:2024/06/08 21:16
From:http://bbs.chinaunix.net/thread-1587667-1-1.html
有群里面的朋友说python的MySQLdb在检索百万数据量的时候巨慢无比,要达到20分钟左右。由于自己的一些项目也用到了MySQLdb,所以特别注意了一下,于是翻阅了源代码。而后经过大半天对其源码的分析,初步得出一些结论。
MySQLdb的性能影响主要是由于_mysql.c代码页中的self->use以及个别函数中的use参数=1或者0时引起的。由于在函数_mysql_ResultObject_Initialize中,利用:
self->use = use;
Py_BEGIN_ALLOW_THREADS;
if (use)
result = mysql_use_result(&(conn->connection));
else
result = mysql_store_result(&(conn->connection));
由这段来决定是采用mysql_use_result还是mysql_store_result。众所周知mysql_use_result连MySQL官方都不大推荐。建议上述代码中将if (use)改为if(self->use==1),此外建议将函数_mysql_ConnectionObject_store_result中的:
arglist = Py_BuildValue("(OiO)", self, 1, self->converter);
改为:
arglist = Py_BuildValue("(OiO)", self, 0, self->converter);
另外将_mysql_ConnectionObject_use_result函数中的:
arglist = Py_BuildValue("(OiO)", self, 1, self->converter);
改为:
arglist = Py_BuildValue("(OiO)", self, 0, self->converter);
总之说了这么多,关键是尽可能使用mysql_store_result。
为了便于大家对MySQLdb的理解,我把修改成功的代码附上。我用的是1.2.3的测试版,为了不和你已经安装的MySQLdb冲突,我把相关代码都改成了mysqldb2,模块名称都是_mysql2.so。打开代码后,make一下会自动生成_mysql2.so。然后执行外面一个测试的代码:
python test1.py
我是在debian 系统上编译的,mysql是5.0的版本。相关编译的路径请自行在Makefile文件修改
尤其在数据超过200w后,可能会发现这个效果。原先需要20分钟,现在大概几十秒。修改后的源码我放在共享里面,名字是mysqldb.tar.gz。
谢谢大家支持,感谢python群(24683344)的支持。也许我分析的有些纰漏,欢迎各位指正,谢谢!
- python-MySQLdb数据超过200万检索过慢的原因分析
- python myql类库MySQLdb在数据过量情况下巨慢无比的原因分析
- sql语句查询过慢的原因分析
- Goahead 文件上传速度过慢原因分析
- win7下安装python-mysqldb模块以及还报No module named MYSQLdb错误的原因
- 网站访问速度过慢的原因
- PHP查询mongodb过慢的原因
- mongodb cpu 超过100%居高不下的原因分析过程
- python的MySqldb使用
- python mysqldb的编写
- python使用MySQLdb向mySQL批量插入数据的方法
- python数据分析(数据检索、加工与存储)
- VB从MySQLDB检索数据以及写入数据
- DataTable数据检索的性能分析
- DataTable数据检索的性能分析
- DataTable数据检索的性能分析
- jpa保存数据过慢的处理办法
- 路由器的登陆界面登陆过慢的原因
- 华为网管的SOA
- AIX 应用sqlplus例子
- centos下tomcat与apache整合
- 质量管理
- 关于读书
- python-MySQLdb数据超过200万检索过慢的原因分析
- 管理杂谈
- linux 常用命令
- WKT、SRID、EPSG概念
- windows live write
- 程序员的美:极致疯狂
- 压缩感知--陶哲轩
- GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
- NS中Scheduler类的工作机制简述