表中相关记录的碎片

时间:2016-12-23 01:17:33

标签: mysql sql database

如果我的表中包含以前购买产品的产品,请执行以下操作:

In [3]: h.transmat_
Out[3]:
array([[ 0.19077231,  0.11117929,  0.24660208,  0.20051377,  0.25093255],
       [ 0.12289066,  0.17658589,  0.24874935,  0.24655888,  0.20521522],
       [ 0.15713787,  0.13912972,  0.25004413,  0.22287976,  0.23080852],
       [ 0.14199694,  0.15423031,  0.25024992,  0.2332739 ,  0.22024893],
       [ 0.17321093,  0.12500688,  0.24880728,  0.21205912,  0.2409158 ]])

正如您在上面的示例中所看到的,用户ID | ProductName | UserID 1 | Grapes | 3455 2 | Water | 1944 3 | Bread | 3455 4 | Milk | 3455 ... 已经购买了葡萄,面包和牛奶。如果我想要检索用户购买的所有产品,我必须找到具有用户3455的每条记录。

存储来自用户3455的所有产品会加快搜索这些记录,例如对硬盘进行碎片整理吗?如果是这样,删除旧记录并将其读取到数据库末尾的过程是否会浪费处理能力?

1 个答案:

答案 0 :(得分:1)

获取所需信息的最快方法是在t(UserId, ProductName)上建立索引。这是以下查询的覆盖索引:

select ProductName
from t
where UserId = 3455;

这意味着查询所需的所有列都在索引中,并且顺序正确。因此,查询优化器可以仅使用索引来解析查询。这应该很快。