mySQL-按行号搜索行吗?

时间:2018-06-29 00:22:31

标签: mysql indexing row

mySQL新手提出的问题。我正在尝试建立一个表,其中包含有关机器零件(螺钉,托架,汽缸等)的信息,并且每个零件都对应于该零件所属的机器。数据库将经过设计,以便每当客户端从表中读取时,都将选择来自一台指定计算机的所有零件。我试图找出最快的方法,可以从磁盘读取属于某个类别的所有行。

排序表不是一种选择,因为很多人可能会一次向表中添加行。为每台计算机使用表也不可行,因为可能会创建新计算机。我希望它必须处理许多INSERT和SELECT操作,但几乎没有DELETE操作。我已经提出了一个计划,以快速识别属于任何机器的每个零件,并且我开始问它是否可行:

包含机器零件数据的每一行将包含同一机器的上一个零件和下一个零件的行号。一个单独的表将包含该表上显示的每台计算机最后一部分的行号。脚本可以跟随这些“指针”的列表,跳到表的不同部分,直到找到所有部分。

TL; DR

这种用行号搜索行的方法是否比用整数主键搜索要快(因为主键不一定表示表上的位置)?会快多少?与使用索引相比,它会带来明显的性能改进吗?

1 个答案:

答案 0 :(得分:0)

这将是一个可怕的方法。符合某些条件的Selecting行是MySQL(或其他任何DB引擎……)的基本功能。

只需在部件表中创建一个名为machine_id的列,并为每台机器指定一个ID。
您可以将计算机放在machines表中,并在machine_id表的parts字段中使用它们的主键。

那么检索机器42的所有零件所需要做的就是:
SELECT * FROM parts WHERE machine_id = 42;

如果您的数据库规模庞大,您也可以考虑在machine_id列中indexing获得更好的性能。