我有一个关于如何优化我的数据库的问题:
我有第一个表,其中我设置了一个元素(板块)的列表及其所有的几何定义,看起来如下:
CONTRACT | NAME | CONTOURS | HOLES | SCRIBING
C1 | D001 | bigString|bigString|bigString
C1 | D003 | bigString|bigString|bigString
C2 | D003 | bigString|bigString|bigString
...然后在第二张桌子上,我有一个盒子的列表(事实上,它们是第一张桌子上的大盘子,我称它为“盒子”,以避免混淆),在每个盒子里,我有一个元素列表,并像这样定义它。
ID | NAME | NAME_ELEMENT | CONTRACT_ELEMENT| QUANTITY |
10001 | BOX1 | D001 | C1| 100 |
10001 | BOX1 | D003 | C1| 100 |
10001 | BOX1 | D003 | C2| 100 |
...我没有在ID上链接,但是在合同和名称上,它是volontary(第一个表只是具有几何定义的表)。
问题是,我有一个带有框列表的ListView,当我单击一个框时,我需要显示该框中的所有元素。现在我只是做了这样的事情:
foreach(Plate plate in contexte.SelectedBox)
{
plate.GetGeometry();
}编辑:忘了说,我的函数GetGeometry只是一个SQL请求"SELECT * FROM DEFINITION_TABLE DEFINITION_TABLE=‘c1’和NAME='D001‘。
它工作得很好,但是当我有一个大盘子,里面有隐藏元素的时候,它是非常长的,因为它会发出数百个选择请求。
我看到了解决这个问题的两种方法:
SELECT *
FROM TABLE_DEFINITION
WHERE (CONTRACT='C1' OR CONTRACT='C2') AND (NAME='D001' OR NAME='D003'...)SELECT *
FROM TABLE_DEFINITION
WHERE (CONTRACT='C1' AND NAME='D001') OR (CONTRACT='C1' AND NAME='D003') OR (CONTRACT='C2' AND NAME='D003')...但如果我有数百个细节,判决将是非常长的。
我觉得第一种选择不是好的,可以用第二种。你对此有什么建议?为MySQL做这么长的句子可以吗?我的刑期被限制了吗?
编辑:谢谢你编辑帖子,你能解释一下你是如何在表格中添加空格的吗?我增加了空格,但是堆栈自动删除了它们?
发布于 2020-10-02 12:06:43
使用表格
WHERE (CONTRACT, NAME) IN (('C1','D001'), ('C1','D003'), ('C2','D003'), ...)它需要更少的字节。
可以对MySQL进行如此长的查询吗?
查找max_allowed_packet值-您的查询文本大小不能超过它(默认为64兆字节)。
记住-如果您的文字列表超过了~10个元素,MySQL将在查询中使用它之前对其进行排序。
https://stackoverflow.com/questions/64170968
复制相似问题