mariadb 查询优化缓慢

swvgeqrz  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(238)

目前,Maria DB查询越来越慢。

UPDATE `table1` 
SET `ANS` = (SELECT COUNT(*) 
             FROM `table2` 
             WHERE `uid` = 1011 AND `opt` = 1) 
WHERE `uid`= 1011;

table2中的行数约为4000万。所以这个查询似乎很慢。
如何优化它?

ih99xse1

ih99xse11#

选择table2中与特定uid和opt匹配的行数。有一个适当的索引用于查找:

create index idx2 on table2 (uid, opt);

然后访问带有特定uid的table1行。也有一个合适的索引:

create index idx1 on table1 (uid);
snvhrwxg

snvhrwxg2#

试试这个。下面的语句会比你原来的update语句更快,因为在那个update语句中,每次都会对每一行进行计数。因此,在with子句下面使用更慢的方法可以确保在表本身上查询一次结果。然后,可以使用它的任何次数如下

With data1 as 
(
SELECT COUNT(*) as cnt
             FROM `table2` 
             WHERE `uid` = 1011 AND `opt` = 1) 
Update table1 t1 , (Select cnt from data1) t2
Set ans=t2.cnt
WHERE `uid`= 1011;
eoxn13cs

eoxn13cs3#

也许是这样的

UPDATE `table1` c
LEFT JOIN (
     SELECT `uid`, COUNT(*) as cnt
     FROM `table2` 
     WHERE `uid` = 1011 AND `opt` = 1
     GROUP BY `uid`) AS b ON b.uid = c.uid
SET `ANS` = c.uid
WHERE c.uid = 1011

或加入槽ID:

相关问题