首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提高性能和速度

如何提高性能和速度
EN

Stack Overflow用户
提问于 2009-12-10 01:08:14
回答 5查看 236关注 0票数 0

我写了这个程序,用来连接和读取数据到文件中,但是这个程序读取速度太慢了。是否有任何方法可以提高性能和更快地将数据加载到文件中。我的目标是大约10万到百万条记录,这就是为什么我担心性能,我也可以像在java中一样使用数组获取大小和批处理大小。

代码语言:javascript
运行
复制
import java.sql as sql
import java.lang as lang
def main():
    driver, url, user, passwd = ('oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@localhost:1521:xe','odi_temp','odi_temp')
    ##### Register Driver
    lang.Class.forName(driver)
    ##### Create a Connection Object
    myCon = sql.DriverManager.getConnection(url, user, passwd)
    f = open('c:/test_porgram.txt', 'w')
    try:
        ##### Create a Statement
        myStmt = myCon.createStatement()
        ##### Run a Select Query and get a Result Set
        myRs = myStmt.executeQuery("select emp_id ,first_name,last_name,date_of_join from src_sales_12")
        ##### Loop over the Result Set and print the result in a file
        while (myRs.next()):
            print >> f , "%s,%s,%s,%s" %(myRs.getString("EMP_ID"),myRs.getString("FIRST_NAME"),myRs.getString("LAST_NAME"),myRs.getString("DATE_OF_JOIN") )
    finally:
        myCon.close()
        f.close()

### Entry Point of the program
if __name__ == '__main__':
    main()
EN

回答 5

Stack Overflow用户

发布于 2009-12-10 09:48:19

除非您使用最好的、最好的数据库和文件服务器,或者运行脚本的最差的设备,否则这个应用程序是受I/O限制的。在从DB返回select之后,数据的实际移动将比Jython、Java或此代码中的任何低效更重要。

在这个过程中,你的CPU基本上是无意识的,你只是没有做足够的数据转换。您可以编写一个比I/O更慢的进程,但这不是其中之一。

你可以用C语言写这段代码,但我怀疑你看不出有什么实质性的区别。

票数 1
EN

Stack Overflow用户

发布于 2009-12-10 01:12:36

不能只使用Oracle命令行SQL客户端将查询结果直接导出到CSV文件中吗?

票数 0
EN

Stack Overflow用户

发布于 2009-12-10 01:52:22

您可以使用带有硬编码索引的getString,而不是列名(在print语句中),这样程序就不必反复查找列名。此外,我对Jython/Python文件输出的了解还不够多,无法说出这是否在默认情况下启用,但您应该尝试确保您的输出是缓冲的。

编辑:

请求的代码(我对此代码的正确性不作任何声明):

代码语言:javascript
运行
复制
print >> f , "%s,%s,%s,%s" %(myRs.getString(0),myRs.getString(1),myRs.getString(2),myRs.getString(3) )

代码语言:javascript
运行
复制
myRs = myStmt.executeQuery("select emp_id ,first_name,last_name,date_of_join from src_sales_12")
hasFirst = myRs.next()
if (hasFirst):
    empIdIdx = myRs.findColumn("EMP_ID")
    fNameIdx = myRs.findColumn("FIRST_NAME")
    lNameIdx = myRs.findColumn("LAST_NAME")
    dojIdx = myRs.findColumn("DATE_OF_JOIN")
    print >> f , "%s,%s,%s,%s" %(myRs.getString(empIdIdx),myRs.getString(fNameIdx),myRs.getString(lNameIdx),myRs.getString(dojIdx) )
    ##### Loop over the Result Set and print the result in a file
    while (myRs.next()):
        print >> f , "%s,%s,%s,%s" %(myRs.getString(empIdIdx),myRs.getString(fNameIdx),myRs.getString(lNameIdx),myRs.getString(dojIdx) )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1875357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档