嵌入在for循环中的SELECT查询与WHERE id IN语法之间的区别

时间:2013-10-22 03:54:04

标签: python mysql mysql-python

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

  1. 运行嵌入for循环的SELECT语句:

    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())
    

1 个答案:

答案 0 :(得分: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端进行额外的过滤,可以考虑在查询中加入过滤逻辑 - 这样也可以加快处理速度。