python - 优化 Python 代码以进行数据库访问

标签 python mysql optimization

我正在构建一个应用程序,其对象的数据存储在 mysql 表中(跨多个表)。当我需要使用对象(检索对象属性/更改属性)时,我使用 mysqldb 查询 sql 数据库(选择/更新)。然而,由于该应用程序的计算量很大,执行时间简直要了我的命。

想了解是否有一些方法可以将所有数据加载到 python 中,对这些对象进行计算/修改,然后对 mysql 数据库进行完整的数据更新?将数据一开始从数据库一次性加载到这些对象的列表中是否会提高性能?另外,由于数据库大小接近 25 MB 左右,是否会导致内存问题。

提前致谢。

最佳答案

25Mb 很小。微观的。 SQL 很慢。冰川。

除非您有事务(具有锁定和多个用户),否则不要在 SQL 上浪费时间。

如果您正在进行“分析”,尤其是计算密集型分析,请将所有数据加载到内存中。

万一数据无法装入内存,请执行此操作。

  1. 将数据查询到平面文件中。这可以很快。如果您不使用 Python,而是使用数据库 native 工具将数据提取到 CSV 或其他小文件中,那么速度是最快的。

  2. 读取平面文件并进行计算,写入平面文件。这速度真快。

  3. 从平面文件中进行批量更新。同样,如果您使用数据库 native 工具集进行插入或更新,这是最快的。


如果您一开始就不需要 SQL,请考虑您最初收到的数据以及您将如何处理它。

  1. 读取原始文件一次,解析它,创建 Python 对象并 pickle 整个列表或字典。这意味着每个后续程序都可以简单地加载腌制文件并开始进行分析。然而。您无法轻松更新腌制文件。你必须创建一个新的。这不是一件坏事。它为您提供完整的处理历史记录。

  2. 读取原始文件一次,对其进行解析,然后使用 shelve 创建 Python 对象。这意味着您可以 更新文件。

  3. 读取原始文件一次,解析它,创建 Python 对象并将整个列表或字典保存为 JSON 或 YAML 文件。这意味着每个后续程序都可以简单地加载 JSON(或 YAML)文件并开始进行分析。然而。您无法轻松更新该文件。你必须创建一个新的。这不是一件坏事。它为您提供完整的处理历史记录。

    这可能会比酸洗稍微慢一些。并且它需要您编写一些帮助程序,以便正确转储和加载 JSON 对象。但是,您可以读取 JSON(和 YAML),从而在处理该文件时获得一些优势。

关于python - 优化 Python 代码以进行数据库访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3770394/

相关文章:

python - 使用相同键将多个字典的值添加到另一个字典的正确方法

甲骨文 : how to ensure that a function in the where clause will be called only after all the remaining where clauses have filtered the result?

python - 可变 block 大小 Pandas Dataframe

Python Pandas 匹配来自不同列的字符串

python - 跟踪每日配额(自动过期增量)——Redis 还是 Pymongo?

mysql - mysql数据库权限丢失,如何找回?

mysql - 从mysql中的表中转储单个记录的脚本

python - getthreshold() 除了垃圾回收之外的用途

php - PHP 和 MySQL 中 undefined variable 索引

algorithm - 如何优化 n 个字符串的连接成本