php mysql网站搜索慢_PHP-MySQL查询从10,000个数据中检索速度太慢(查询优化)

会员,会员和付款表中的10,000个数据.在每个会员的最新付款中搜索特定付款状态时,检索查询的速度太慢.

SELECT m.id AS member_id, m.full_name, m.unit, m.street, m.block, m.country, m.postal_code, cat . * , cat.id AS cat_id, mem.membership_num, mem.id AS membership_id

FROM memberships mem

LEFT JOIN category cat ON mem.category_id = cat.id

LEFT JOIN members m ON mem.member_id = m.id

WHERE m.id >0

AND m.status = 'active'

AND (

mem.category_id

BETWEEN 1

AND 11

)

AND (

SELECT p1.payment_status_id

FROM payments p1

WHERE p1.category_id = cat.id

AND p1.member_id = mem.member_id

AND p1.payment_status_id = '1'

LIMIT 1

) != ''

GROUP BY CONCAT( cat.id, '_', m.unit, '_', m.postal_code )

ORDER BY m.full_name ASC

LIMIT 0 , 25

说明

查询运行太慢21.00秒至99.00秒

解决方法:

问题

在具有多个联接和子查询以检索表中大量数据(约10,000个)的mysql查询中,该页面的运行速度变慢了(3-5分钟而不是几秒钟).

解决方案-使用的列索引

添加索引并完成各种搜索查询,检索效果更好.

笔记

索引用于快速查找具有特定列值的行.没有索引,MySQL必须从第一行开始,然后通读整个表以找到相关的行.桌子越大,花费越多.如果表中有相关​​列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据.这比顺序读取每一行要快得多.

改善SELECT操作性能的最佳方法是在查询中测试的一个或多个列上创建索引.索引条目的作用类似于指向表行的指针,从而使查询可以快速确定哪些行与WHERE子句中的条件匹配,并检索这些行的其他列值.所有MySQL数据类型都可以建立索引.

eg: ALTER TABLE `memberships` ADD INDEX ( `category_id` ) ;

缺点:索引是您可以在MySQL表上启用的一些额外功能,以提高性能,但是它们确实有一些缺点.当您创建一个新索引时,MySQL将构建一个单独的信息块,每次对该表进行更改时都需要更新该信息块.这意味着,如果您不断更新,插入和删除表中的条目,可能会对性能产生负面影响.

谢谢

@venca @鲍里斯@Raja Amer Khan和所有

感谢所有帮助我解决问题的人.

标签:join,subquery,mysqli,left-join,php

来源: https://codeday.me/bug/20191120/2041795.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值