0

这些方法中的一种表现更好吗?有更好的方法吗?为什么?我在 python 中这样做是否重要?(您可以正确假设 的id列上有索引my_table)。

  1. 运行SELECT语句,嵌入在 for 循环中:

    for an_id in a_long_list_of_ids:
       cursor.execute("SELECT * FROM my_table WHERE id=%s", (an_id,))
       do_something(cursor.fetchall())
    
  2. SELECT使用语法运行单个语句WHERE id IN

    cursor.execute("SELECT * FROM my_table WHERE id IN (%s)", 
        (','.join(a_long_list_of_ids),)
    )
    do_something(cursor.fetchall())
    
4

1 回答 1

1

如果是

for an_id in a_long_list_of_ids:
   cursor.execute("SELECT * FROM my_table WHERE id=%s", (an_id,))
   do_something(cursor.fetchall())

您正在len(a_long_list_of_ids)对数据库进行查询。

的情况下

cursor.execute("SELECT * FROM my_table WHERE id IN (%s)", 
    (','.join(a_long_list_of_ids),)
)
do_something(cursor.fetchall())

你只做一个查询。

很明显,第二种方式的性能更高。

如果您想要更高的性能,请仅选择您将使用的列 - 这会更快。

如果您要在 Python 端进行额外的过滤,请考虑将过滤逻辑放在查询中 - 这也将使处理速度更快。

于 2013-10-22T04:30:08.513 回答