使用SQL或python来检查集合成员资格?

时间:2014-09-08 22:47:00

标签: python sql

以下内容如何比较性能以查看我所拥有的ID是否在一个集合中。

# python list
list_of_ids = [1,2,3,...]
if id in list_of_ids:
    # ok

# python set
set_of_ids = set([1,2,3,...])
if id in set_of_ids:
    # ok

# python dict
dict_of_ids = {1:,2:,3:,...}
if id in dict_of_ids:
    # ok

# SQL
cursor.execute('SELECT * FROM mytable WHERE id = %s, id)
if cursor.fetchone():

// in C
# [ not written]

这些比较如何?

1 个答案:

答案 0 :(得分:1)

从算法上讲,第一种方法采用线性时间和空间O(n)

第二种和第三种方法使用HASH table的运行速度比O(log(n))

并且SQL方法使用B-tree,如果索引在该字段上,则其时间复杂度为O(log(n))

如果你使用C,它会节省一些时间,因为C语言会跳过许多无效的部分。


<强>结论:

  1. 第一种方法花费了O(n)时间和内存成本,最好不要使用它。

  2. 第二个和第三个是快速的,但如果数据太大,则会很慢。

  3. SQL方法可能会花费网络通信时间,因此它有其他部分成本,但如果数据很大,我认为SQL方式会更合理。

  4. C方法非常快,如果你真的需要它(当然,它使用的算法必须是高效的),这将使代码变得丑陋。

  5. 希望它有所帮助。