Php 由于我的查询,我的网站加载速度太慢

Php 由于我的查询,我的网站加载速度太慢,php,database,laravel,Php,Database,Laravel,我需要在我的网站上添加数据库中的一些角色-表role\u users,列user\u id和role\u id。我将其与以下代码一起使用: $career_solutions_data = DB::select(" SELECT career_solutions.id, career_solutions.user_id, career_solutions.subject, career_solutions.date, career_solutions.public, career_

我需要在我的网站上添加数据库中的一些角色-表
role\u users
,列
user\u id
role\u id
。我将其与以下代码一起使用:

$career_solutions_data = DB::select(" 
SELECT 
career_solutions.id,
career_solutions.user_id,  
career_solutions.subject, 
career_solutions.date, 
career_solutions.public, 
career_solutions.views, 
career_solutions.optional, 
career_solutions.on_offer, 
users.username, 
users.profile_picture, 
categories.category, 
categories.category_url, 
categories.color, 
career_solutions_categories.category as sub_category,
career_solutions_format.category as event_format,
career_solutions_certification.category as certification

FROM career_solutions 

INNER JOIN categories 
ON categories.id = career_solutions.topic_category_id 

INNER JOIN career_solutions_format
ON career_solutions_format.id = career_solutions.topic_format_id

INNER JOIN career_solutions_certification
ON career_solutions_certification.id = career_solutions.topic_certification_id

INNER JOIN career_solutions_categories 
ON career_solutions_categories.id = career_solutions.topic_subcategory_id 

INNER JOIN users 
ON users.id = career_solutions.user_id 


INNER JOIN privacy_settings 
ON privacy_settings.user_id = users.id 

WHERE users.deleted_at IS NULL 
AND ( 
(privacy_settings.career_solutions = 0 AND public = 1 ) 
OR (users.id IN ( 

SELECT contacts.contact_id 
FROM contacts 
WHERE contacts.user_id = $id 
) 
) 
) 

OR users.id = $id 

ORDER BY date desc limit 5000 
"); 





我的看法是:

@if($carer_solution_data['role'][0]['pivot']['role_id'] == 1 )
                                            <i style="font-size: 11px" class="icon-user"></i> 
                                            @else <i style="font-size: 11px" class="icon-hotel-restaurant-172 u-line-icon-pro fa- fa-lg"></i>

                                            @endif
没有它,我的网站可以快速正确地加载。
我的网站现在加载速度太慢了。我有超过9000多篇关于我的职业解决方案的帖子,我想这就是问题所在。这个变量
$carer\u solution\u data['role']
正在加载所有帖子,这就是我网站的问题所在。如何避免这个问题?

你的问题不一定是你的查询,你没有做任何太复杂的事情,问题是你的浏览器被淹没了

另一方面,您可以做一些事情来改进查询。 -首先,您可以使用“Explain”语句为您提供有关如何生成查询以及如何改进查询的更多信息 -其次,您可以使用“索引”来改善表的关系和效率

此URL提供有关使用“解释”语句的更多信息:

正如我前面所说,您的浏览器正在被淹没,因为它试图同时加载9000(行)个元素。 看看如何实现分页等功能,将数据分解为更小的数据块

Example of Pagination: (9000 Rows)

Chunk: 0-99 - Page 1
Chunk: 100-199 - Page 2
Chunk: 200-299 - Page 3
...
您的系统应该能够根据一个事件向服务器发送请求,例如滚动到页面底部(无限滚动),选择下一页按钮,提供下一个区块

您还可以启用laravel探查器查看代码中的任何瓶颈:
你的问题不一定是你的查询,你没有做任何太复杂的事情,问题是你的浏览器被淹没了

另一方面,您可以做一些事情来改进查询。 -首先,您可以使用“Explain”语句为您提供有关如何生成查询以及如何改进查询的更多信息 -其次,您可以使用“索引”来改善表的关系和效率

此URL提供有关使用“解释”语句的更多信息:

正如我前面所说,您的浏览器正在被淹没,因为它试图同时加载9000(行)个元素。 看看如何实现分页等功能,将数据分解为更小的数据块

Example of Pagination: (9000 Rows)

Chunk: 0-99 - Page 1
Chunk: 100-199 - Page 2
Chunk: 200-299 - Page 3
...
您的系统应该能够根据一个事件向服务器发送请求,例如滚动到页面底部(无限滚动),选择下一页按钮,提供下一个区块

您还可以启用laravel探查器查看代码中的任何瓶颈:

您的具体问题是什么?检查后应用于数据库中的索引。确保您已编制索引并分页。不要拉~5000行,希望它能顺利进行。我已经在我的网站上进行了分页,在第一页我有6个职业解决方案……但我不知道为什么加载这么慢。@AndreiNagy你的具体问题是什么?检查后应用于数据库中的索引。确保你已经索引并分页。不要拉5000行,希望它能顺利进行。我已经在我的网站上进行了分页,在第一页我有6个职业解决方案……但我不知道为什么加载这么慢。@AndreiNagy