此查询锁定(导致它锁定元数据)数据库,用户无法执行任何其他操作
此查询到底有什么问题,并建议对查询进行更改以使其正常运行。
SELECT
a.uid, p.fname, p.lname
FROM
adt_data a
INNER JOIN
p_data p ON a.uid = p.uid
WHERE
a.id
IN (
SELECT MAX( id )
FROM
adt_data
GROUP BY
uid, facility_id
ORDER BY
id DESC
)
AND
patient_category !=3
AND
a.uid NOT
IN
( 6987 )
ORDER BY
p.lname, p.fname
解释 SELECT MAX( id ) FROM adt_data GROUP BY pid, facility_id ORDER BY id DESC 回来了
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE adt_data ALL NULL NULL NULL NULL 13757 使用临时;使用文件排序
第 13757 行
在下面解释整个查询的结果
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY a ALL pid,patient_category NULL NULL NULL 13757 Using where; Using temporary; Using filesort
1 PRIMARY p eq_ref pid pid 8 bestcaredb_19jun15.a.pid 1
2 DEPENDENT SUBQUERY adt_data ALL NULL NULL NULL NULL 13757 Using temporary; Using filesort
最佳答案
要调试 mysql 中的表锁,您应该使用 describe 或 explain。并首先检查您的子查询的结果
explain select MAX(id) from adt_data ...
这将向您显示访问了多少行以及是否对键进行了索引,这将加快匹配和排序操作。
添加 key
要添加 key ,例如您可以使用 adt_data
alter table adt_data add key facuser (uid,facility_id), add unique key id;
其中 (uid,facility_id) 对是非唯一键,id 必须是唯一的。
关于php - mysql查询锁定数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977171/