首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-Lumen API数据库设计

问Laravel-Lumen API数据库设计
EN

Stack Overflow用户
提问于 2019-04-05 16:05:58
回答 1查看 117关注 0票数 0

我需要在我即将与Laravel的项目中的数据库设计和表关系方面提供帮助,以尽可能减少查询时间,下面我将描述我的所有表和API端点(我将只列出每个表中所需的字段)。

代码语言:javascript
复制
Table - Customer
-id
-name
-image
.
.


Table - Item
-id
-customer_id
-name
-price
-image
.
.
+ 8 more


Table Item_color

-id
-item_id
-red
-black
.
.

Table Favorites

-id
-user_id
-item_id

我的终点是:

  • getItems (列出所有项目)
  • getUseFavorites (列出用户收藏项)

注:我没有使用雄辩的人际关系。

代码语言:javascript
复制
SELECT * from item, customer.name, customer.img_url,customer.location,item_color.red,item_color.blue,item_color.white
JOIN customer ON item.id = customer.id
JOIN sidedish ON item.id = item_color.item_id
WHERE item.location = $location

对于第一个端点,我必须检索所有项目字段+客户名称、图像和位置+所有项目颜色(对于这个查询,我使用JION)

对于第二个端点,我还必须检索我使用JOIN的用户的所有收藏项。

我在运行超过500个用户和条目的工厂,每个用户有50个最喜欢的项目后,我的问题是查询时间需要3.8秒才能完成上面的端点,所以现在我在想,如果应用程序达到了10000用户或更多用户,该怎么办?在搜索后,我发现很多文章都指出,使用未优化的JION查询会减慢应用程序的速度,因此,任何建议、想法都将受到欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-06 02:32:03

当数据库中没有索引时,查询非常慢,所有主键和外键都应该进行索引,您可以在迁移(https://laravel.com/docs/5.8/migrations#indexes)上定义它。

正如@adam所做的那样,将结果分页(https://laravel.com/docs/5.8/pagination#paginating-eloquent-results)。

第三个建议是只返回需要的字段,所以使用select('name', 'image')只获取所需的内容(https://laravel.com/docs/5.8/queries#selects)。

使用模型关系,它不会改善您的查询时间,而是您的开发时间。

如果使用的是MySQL或MariaDB,则可以使用方法toSql() (https://scotch.io/tutorials/debugging-queries-in-laravel)打印sql语句,并使用EXPLAIN语句尝试识别正在发生的事情(https://dev.mysql.com/doc/refman/5.7/en/using-explain.html)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55539457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档