此查询锁定(导致其锁定元数据)数据库,用户无法执行任何其他操作
此查询究竟出了什么问题,并建议更改查询以便正常运行。
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
EXPLAIN SELECT MAX(id)FROM adt_data GROUP BY pid,facility_id ORDER BY id DESC 正在回归
id select_type表类型possible_keys键key_len ref行额外
1 SIMPLE adt_data ALL NULL NULL NULL NULL 13757使用临时;使用filesort
第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
答案 0 :(得分:0)
要在mysql中调试表锁,您应该使用describe或explain。首先检查子查询的结果
$http
这将显示访问的行数以及密钥是否已编制索引,这将加快匹配和订单操作。
要为adt_data添加密钥,您可以使用
explain select MAX(id) from adt_data ...
其中对(uid,facility_id)是非唯一键,id必须是唯一的。