gpt4 book ai didi

mysql - Laravel-Lumen API 的数据库设计

转载 作者:行者123 更新时间:2023-11-29 09:46:40 24 4
gpt4 key购买 nike

我需要有关 Laravel-Lumen 即将进行的项目的数据库设计和表关系方面的帮助,以尽可能减少查询时间,下面我将描述我的所有表和 API 端点(我将仅列出来自每个表)

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(列出用户收藏夹项目)

注意:我没有使用 Eloquent 关系。

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 查询会减慢您的应用程序,因此任何建议、想法将不胜感激

最佳答案

当数据库上没有索引时,查询非常慢,所有主键和外键都应该建立索引,您可以在迁移中定义它( 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)。

关于mysql - Laravel-Lumen API 的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com