MySQL使用join时查询计数非常慢

MySQL使用join时查询计数非常慢,mysql,sql,Mysql,Sql,我有一个MySQL查询,它有将近500k的数据 SELECT COUNT(*) AS Toplam FROM userpersonel p INNER JOIN usermessagecontent m ON p.ID = m.MeID WHERE p.VIP = 0 AND p.BotStatus = 0 AND m.End = 0 我正在本地数据库上试用它,大约2分钟后它就会进行查询 如何减少时间?对于此查询: SELECT C

我有一个MySQL查询,它有将近500k的数据

SELECT  COUNT(*) AS Toplam
    FROM  userpersonel p
    INNER JOIN  usermessagecontent m  ON p.ID = m.MeID
    WHERE  p.VIP = 0
      AND  p.BotStatus = 0
      AND  m.End = 0
我正在本地数据库上试用它,大约2分钟后它就会进行查询

如何减少时间?

对于此查询:

SELECT COUNT(*) AS Toplam
FROM userpersonel p INNER JOIN
     usermessagecontent m 
     ON p.ID = m.MeID
WHERE p.VIP = 0 AND p.BotStatus = 0 AND m.End = 0;
您有两种索引策略,这取决于
WHERE
子句过滤器的限制性更强

一是:

  • userpersonel(VIP、BotStatus、Id)
  • usermessagecontent(Meid,end)
二是:

  • userpersonel(id、VIP、BotStatus)
  • usermessagecontent(end,Meid)

确保您的
m.MeID
具有与其关联的索引。您还可以使用
EXPLAIN SELECT..
运行查询,查看MySQL做了什么,使用了哪些索引。。在一个相对较小的数据集上,使用这样的基本选择进行简单的连接应该几乎是即时的;请编辑您的问题以添加
show create table userpersonel的(作为文本)输出
显示创建表usermessagecontent
解释选择COUNT(*)作为Toplam,从userpersonel p内部连接usermessagecontent m到p.ID=m.MeID,其中p.VIP=0,p.BotStatus=0,m.End=0
你能给我一个查询示例吗?@ardalegent这个查询就是你的查询;Gordon正在告诉你,对于这一点,哪些索引必须是最佳的query@ysth我不知道你这是什么意思。我想举个例子,说明我该如何做。@ardalegent<代码>创建索引