我想使用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是一个LINE(例如),那么我逐步浏览该行上的所有点,获取每个点的坐标以在画布上渲染该行。
"SELECT * FROM 'points' WHERE 'DrawingID'=57 AND 'entity'=457885;"
我的问题是用户可能想要放大和缩小图形,需要通过数据库进行多次查询,我认为将图形的所有实体拆分成单独的临时数据库会更好这样至少可以删除drawingID查询。
有没有这样做的机制?是否有更好,更有效的方式来做我想要完成的事情?
答案 0 :(得分:1)
构建和查询新的单独临时数据库不会带来巨大的性能提升。
如果要使用数据库,为了获得改进,您可以开始使用预准备语句,这是数据库分析和编译的特殊语句,优化SQL语句并将结果存储在模板中。
将值绑定到参数时,数据库将执行语句。
假设您将entityID存储到$ entityID中,您可以运行:
$stmt = $conn->prepare("SELECT * FROM 'points' WHERE 'DrawingID'=57 AND 'entity'=?");
$stmt->bind_param("i", $entityID);
但是,我希望在服务器或客户端上提供更强大的解决方案来缓存结果。 有很多方法可以缓存结果,但总而言之,您可以将绘图的所有点导出到JSON文件(XML是另一种选择)并使用库渲染点。
您还应该查看具有大量示例的docs,并解释使用预准备语句的好处和注意事项。
然而,我现在可以想到的最佳解决方案是不使用数据库,而是将CAD绘图导出为SVG。然后,所有缩放都可以在客户端完成,几乎没有服务器的开销。
答案 1 :(得分:1)
这个'复合材料' index将有助于该查询的性能:
INDEX(DrawingID, entity) -- in either order
这应该使查询速度如此之快,以至于你甚至不应该考虑一个单独的数据库......"。
是entitiy
还是entityID
??