Php 多表优化查询结果

Php 多表优化查询结果,php,mysql,sql,Php,Mysql,Sql,我尝试使用4个表获取数据。 表格列表 mysql> select uuid,name from labels limit 1; +--------------------------------------+-------+ | uuid | name | +--------------------------------------+-------+ | 7262b06e-9263-4825-8411-4c107104a6

我尝试使用4个表获取数据。 表格列表

mysql> select uuid,name from labels limit 1;
+--------------------------------------+-------+
| uuid                                 | name  |
+--------------------------------------+-------+
| 7262b06e-9263-4825-8411-4c107104a60b | INDIA |
+--------------------------------------+-------+
1 row in set (0.00 sec)
  • 数字
  • 召唤
  • 参考标签号
  • 标签
我想获取带有特定标签的电话号码的数据。 这是桌子。
数字表

select id,uuid,number from numbers limit 1;
+----+--------------------------------------+------------+
| id | uuid                                 | number     |
+----+--------------------------------------+------------+
|  1 | ed268b05-758e-44fd-b429-8d5223651814 | 1234561222 |
+----+--------------------------------------+------------+
呼叫表

mysql> select id,uuid,did from calls limit 2;
+----+-------------------------------------+------------+
| id | uuid                                | number     |
+----+-------------------------------------+------------+
|  1 | ddddass-b810-4f23-7456-8ff56efab080 | 1234561222 |
|  2 | dddddd-b810-4f23-7456-8ff56efab080  | 123456789  |
+----+-------------------------------------+------------+
2 rows in set (0.02 sec)
ref\u label\u no Table

mysql> select uuid,number_uuid,label_uuid from ref_label_no limit 1;
+--------------------------------------+--------------------------------------+--------------------------------------+
| uuid                                 | number_uuid                          | label_uuid                           |
+--------------------------------------+--------------------------------------+--------------------------------------+
| 7a5e1b6e-0194-4993-8d78-5f7a1b60c7d2 | ed268b05-758e-44fd-b429-8d5223651814 | 7262b06e-9263-4825-8411-4c107104a60b |
+--------------------------------------+--------------------------------------+--------------------------------------+
1 row in set (0.00 sec)
标签表

mysql> select uuid,name from labels limit 1;
+--------------------------------------+-------+
| uuid                                 | name  |
+--------------------------------------+-------+
| 7262b06e-9263-4825-8411-4c107104a60b | INDIA |
+--------------------------------------+-------+
1 row in set (0.00 sec)
现在,我想要一个结果,比如呼叫数和总呼叫数。[我需要这个输出]

mysql> select uuid,name from labels limit 1;
+--------------------------------------+-------+
| Number                       | Total_calls  |
+--------------------------------------+-------+
| 13456789                     |       2      |
+--------------------------------------+-------+
1 row in set (0.00 sec)
我提出了以下问题,但没有成功,也花了太多时间来回答

select count(*) as Total_calls,calls.number as did,labels.name,calls.created_at as callstart from calls, labels JOIN ref_label_no ON labels.uuid = ref_label_no.label_uuid JOIN numbers ON numbers.uuid = ref_label_no.number_uuid where labels.name="INDIA"  group by calls.number;

有任何建议或建议吗?

多个表避免使用join,使用Union。它将比加入更快

像这样,

select uuid,did from calls union 
select uuid,number_uuid as did from ref_label_no union
select uuid,name as did from labels
由于我们正在计算按数字分组的呼叫总数,因此您无法在查询结果中选择calls.created_at,因为它与聚合函数count冲突

存在以下查询使用条件:

SELECT COUNT(calls.uuid) as total_calls, numbers.number
FROM calls JOIN numbers ON numbers.number = calls.number
WHERE EXISTS(SELECT 1 FROM ref_label_no JOIN labels ON labels.uuid = ref_label_no.label_uuid
WHERE labels.name="INDIA" AND numbers.uuid = ref_label_no.number_uuid)
GROUP BY numbers.number;

ref\u label\u no
表格扮演什么角色?当这些表上似乎也有一个自动递增列时,为什么要使用UUID呢。如果您使用UUID,您不需要一个自动递增的REF\u标签\u没有表包含所有参考值,如数字标签和数字表UUID,我们使用的UUID参考值不是基于主键。很抱歉,注释不是很清楚REF\u标签\u没有表包含所有参考值,如数字的UUID和标签的UUID,我们正在使用这个新的引用表来唯一地收集那里的所有信息。但是我的结果也显示错误,只希望调用表中的结果,但希望按标签筛选,任何使用Union的引用查询?在哪里应用where条件?我应该使用表别名吗?使用这个查询,在我的calls表中有大约1个lk记录,提取记录大约需要8分钟。在我的情况下,它不起作用。您的表中有哪些索引?表中缺少索引是主要的性能杀手。它返回了正确的结果吗?现在应用索引。正如我们在这个查询中获取记录的时间是“集合中的20行(7.64秒)”。仍然需要7秒。索引应该应用于那些连接列以及where条件列和group by列。每个表有多少数据(行)?我已经更新了查询以使用EXISTS条件,以查看它是否有影响。