【发布时间】:2009-09-04 18:47:16
【问题描述】:
我在 MySQL 表中有一个包含 15k 条目的大列表,我需要从中选择一些项目,很多次。例如,我可能想要数字字段介于 1 和 10 之间的所有条目。
在 SQL 中这很容易:
SELECT text FROM table WHERE number>=1 AND number<10;
如果我将整个表提取到 Python 列表中:
PyList = [[text1, number1], [text2, number2], ...]
然后我可以通过遍历整个列表来提取我想要的相同文本值
for item in PyList
if item[1] >=1 and item[1]<10:
result.append(item[0])
现在,两者之间的性能问题是我必须为滑动窗口执行此操作。我想得到介于 1 和 10 之间的那些,然后是 2 和 11、3 和 12、... 14990 和 15000 对于这么大的列表,哪种方法更快?
我正在考虑的 Python 改进是按数字对 Python 列表进行预排序。当窗口移动时,我可以从result 中删除最小值并附加所有验证下一个条件的元素以获得新的result。我还将跟踪 PyList 中的索引,以便知道下一次迭代从哪里开始。这样可以避免我再次遍历整个列表。
我不知道如何为非常相似的连续选择加速 MySQL,我不知道它如何在内部工作以了解两种方法之间的性能差异。
您将如何实现这一点?
【问题讨论】: