php - mysql查询锁定数据库

标签 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 

解释 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/

相关文章:

mysql - XAMPP 文件夹中 MySQL 数据库表的确切位置是什么?

php - 如何使用另一个文件中的图像更改背景?

php - 如何订购产品最多的类别

mysql - 删除不适用于连接的查询

python - 使用 django 光标保存转义字符时出错

sql - 在 SQL 中使用修改后的关系复制同一个表中的数据

PHP 日期与 MySQL 日期字段的比较

php - 删除文本文件中的第一行而不为整个文本文件分配内存

php - MySQL 搜索不同的表并只获取特定的 ID

mysql - 使用数据库关系限制输入