Php 用于减少MariaDB中查询的临时数据库

Php 用于减少MariaDB中查询的临时数据库,php,sql,wordpress,mariadb,Php,Sql,Wordpress,Mariadb,我想使用wordpress访问CAD绘图文件 每个图形包含多个不同类型的图元:线、文字、尺寸等 我以以下方式将所有实体存储在一个表中: | DrawingID | entityID | entityType | colour | other | 线上的点如下所示: | pointID | drawing | entity | x-coord | y-coord | z-coord | 为了渲染图形,我获取图形ID,然后逐步遍历具有该图形ID的所有实体 "SELECT * FROM 'enti

我想使用wordpress访问CAD绘图文件

每个图形包含多个不同类型的图元:线、文字、尺寸等

我以以下方式将所有实体存储在一个表中:

| DrawingID | entityID | entityType | colour | other |
线上的点如下所示:

| pointID | drawing | entity | x-coord | y-coord | z-coord |
为了渲染图形,我获取图形ID,然后逐步遍历具有该图形ID的所有实体

"SELECT * FROM 'entities' WHERE 'DrawingID'=57;"
如果entitytype是一条线(例如),那么我将逐步遍历该线上的所有点,获取每个点的坐标,以便在画布上渲染该线

"SELECT * FROM 'points' WHERE 'DrawingID'=57 AND 'entity'=457885;"
我的问题是,用户可能希望放大和缩小图形,需要通过数据库进行多次查询,我认为最好将图形的所有实体拆分为一个单独的临时数据库,以便至少可以删除drawingID查询


有这样做的机制吗?有没有更好、更高效的方法来完成我想要完成的任务?

构建和查询一个新的独立临时数据库不会带来性能的巨大提高

如果您想使用数据库,为了得到改进,可以开始使用prepared语句,这是数据库解析和编译的特殊语句,优化SQL语句并将结果存储在模板中

将值绑定到参数时,数据库将执行该语句

假设将entityID存储到$entityID中,则可以运行:

$stmt = $conn->prepare("SELECT * FROM 'points' WHERE 'DrawingID'=57 AND 'entity'=?");
$stmt->bind_param("i", $entityID);
不过,我希望有一个更强大的解决方案,在服务器或客户端缓存结果。 缓存结果的方法有很多,但总而言之,可以将图形中的所有点导出到JSON文件(XML是另一个选项)并使用库渲染这些点

您还应该看看有很多示例的,并解释使用准备好的语句的好处和注意事项


然而,目前我认为最好的解决方案不是使用数据库,而是将CAD图形导出到SVG中。然后,所有的缩放都可以在客户端完成,几乎没有服务器开销。

构建和查询一个新的独立临时数据库不会带来性能的巨大提高

如果您想使用数据库,为了得到改进,可以开始使用prepared语句,这是数据库解析和编译的特殊语句,优化SQL语句并将结果存储在模板中

将值绑定到参数时,数据库将执行该语句

假设将entityID存储到$entityID中,则可以运行:

$stmt = $conn->prepare("SELECT * FROM 'points' WHERE 'DrawingID'=57 AND 'entity'=?");
$stmt->bind_param("i", $entityID);
不过,我希望有一个更强大的解决方案,在服务器或客户端缓存结果。 缓存结果的方法有很多,但总而言之,可以将图形中的所有点导出到JSON文件(XML是另一个选项)并使用库渲染这些点

您还应该看看有很多示例的,并解释使用准备好的语句的好处和注意事项


然而,目前我认为最好的解决方案不是使用数据库,而是将CAD图形导出到SVG中。然后,所有的缩放都可以在客户端完成,几乎不会给服务器带来任何开销。

此“复合”索引将有助于该查询的性能:

INDEX(DrawingID, entity)  -- in either order
<>这应该使查询如此之快,以至于你甚至不应该考虑一个“单独的数据库…”。
entitiy
还是
entityID

此“复合”索引将有助于该查询的性能:

INDEX(DrawingID, entity)  -- in either order
<>这应该使查询如此之快,以至于你甚至不应该考虑一个“单独的数据库…”。
entitiy
还是
entityID

谢谢你的建议David,这非常有用。谢谢你的建议David,这非常有用。谢谢你,Rick。它是entityID。David的回答促使我们重写,所以数据库的负担应该少很多。谢谢,Rick。它是entityID。David的回答促使重写,因此数据库的负担应该大大减轻。