【发布时间】:2015-08-01 03:33:24
【问题描述】:
也许通过一个例子可以更清楚地说明这个问题。假设我正在使用的数据集是一大堆(几千兆字节)可变长度的元组列表,每个列表都与一个唯一的 ID 和一些元数据相关联,我希望能够通过以下方式快速检索这些列表中的任何一个它的 ID。
我目前有两个或多或少这样设置的表:
TABLE list(
id VARCHAR PRIMARY KEY,
flavor VARCHAR,
type VARCHAR,
list_element_start INT,
list_element_end INT)
TABLE list_element(
id INT PRIMARY KEY,
value1 FLOAT,
value2 FLOAT)
要从数据库中提取特定列表,我目前执行以下操作:
SELECT list_element_start, list_element_end FROM list WHERE id = 'my_list_id'
然后我使用检索到的list_element_start 和list_element_end 值来获取列表元素:
SELECT *
FROM list_element
WHERE id BETWEEN(my_list_element_start, my_list_element_end)
当然,这工作得非常快,但我觉得好像有更好的方法来做到这一点。我知道我可以在 list_element_end 中有另一个名为 list_id 的列,然后执行SELECT * FROM list_element WHERE list_id = 'my_list_id' ORDER BY id 之类的操作。但是,在我看来,拥有该额外列以及该列上的外键索引会占用大量不必要的空间。
有更简单的方法吗?
抱歉,如果以前有人问过这个问题,但我无法找到答案。如果可能的话,我还想在 Python 中使用 SQLAlchemy 来完成所有这些工作。
提前致谢!
【问题讨论】:
-
为什么一个简单的连接不够?
-
您可以使用 blob 来节省空间,但管理它们(修改、删除)会很麻烦。
标签: python mysql database sqlalchemy