Php 如何在执行查询时解决数据库锁定问题
嗨,朋友们,谁能告诉我我的问题是什么。当我执行时,它会将数据库锁定5到10分钟,请帮助我优化此查询Php 如何在执行查询时解决数据库锁定问题,php,mysql,database,performance,Php,Mysql,Database,Performance,嗨,朋友们,谁能告诉我我的问题是什么。当我执行时,它会将数据库锁定5到10分钟,请帮助我优化此查询 SELECT u.username, u.email, u.created_at, p.firstname, p.lastname, p.address, p.address_2, p.city, p.country, p.state, p.zip, p.phone,
SELECT
u.username,
u.email,
u.created_at,
p.firstname,
p.lastname,
p.address,
p.address_2,
p.city,
p.country,
p.state,
p.zip,
p.phone,
p.phone_2,
u.last_ip,
u.last_login_at,
u.auto_login,
u.registration_page,
s.product_name
FROM
users AS u
Left Join subscriptions AS s ON u.id = s.user_id
Left Join profiles AS p ON u.id = p.user_id
where u.registration_page='Chris_Cleanse' and
u.id not in (select user_id from goal_sheets) and
u.id not in(select user_id from sheet_user_popup_not_adam) and
s.expired=TRUE ORDER BY u.id DESC;
尝试使用
内部联接
。请访问以获取有关JOIN
s的直观说明
PS:在查询中正确转义`table`
和`columns`
名称。这是个好习惯
更新:运行一个
解释选择…
(您的查询在这里而不是选择…
)并分析结果。也在这里发布它们。您可以尝试为上述记录创建mysql视图,因为大约有500万条记录我想您在where条件下的子查询包含大量数据。
也许您可以尝试优化SQL,如下所示:
SELECT
u.username,u.email
FROM
users AS u
Left Join subscriptions AS s ON u.id = s.user_id
Left Join profiles AS p ON u.id = p.user_id
Left Join goal_sheets gs ON u.id = gs.user_id
Left Join sheet_user_popup_not_adam sa ON u.id = sa.user_id
where u.registration_page='Chris_Cleanse'
and gs. user_id is null
and sa.user_id is null
s.expired=TRUE ORDER BY u.id DESC;
这个问题更适合,或者你可以发布
解释选择u.username,
(解释你的查询)?@D.Kasipovic这里是输出首先,在订阅上创建索引用户id(用户id)并查看这如何减少时间。您还可以用联接替换两个子查询,然后添加条件,其中目标\u sheets.user\u id为NULL,而sheet\u user\u popup\u not\u adam.user\u id为NULL。@GeraldSchneider:这与代码检查无关。这段代码似乎不起作用,我们只检查工作代码。感谢CodeAngry的回复,我尝试了一下,但它不起作用:(将近500万条记录。@haseeb:)很好!你有索引吗?仅仅添加索引需要一段时间。当你浏览500万行并加入它们时,拥有一些更先进的MySQL技术是很好的。还考虑移动到<代码> dab.sx.com > /COD> .@ Haseb添加索引>代码>注册页面>代码>代码> ID 字段。