mysql查询锁定数据库

时间:2015-06-22 10:05:28

标签: php mysql database locking

此查询锁定(导致其锁定元数据)数据库,用户无法执行任何其他操作

此查询究竟出了什么问题,并建议更改查询以便正常运行。

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

1 个答案:

答案 0 :(得分:0)

要在mysql中调试表锁,您应该使用describe或explain。首先检查子查询的结果

$http

这将显示访问的行数以及密钥是否已编制索引,这将加快匹配和订单操作。

添加密钥

要为adt_data添加密钥,您可以使用

explain select MAX(id) from adt_data ...

其中对(uid,facility_id)是非唯一键,id必须是唯一的。