Fra*_*ois 6 mysql optimization union
我在 MySQL 中的 UNION 查询有问题。我们的网站上有 1000 万玩家,我们希望选择具有多标准系统的玩家。例如,选择美国人,男性,年龄超过 35 岁。
我们正在使用“垂直分区”:每个标准 1 个表。例如:
* user_country
- id_user
- id_country
Run Code Online (Sandbox Code Playgroud)
我们想做这样的查询:
SELECT id_inscri FROM userdata_langue
WHERE id_langue='43'
UNION
SELECT id_inscri FROM userdata_sexe
WHERE sexe='2'
UNION
SELECT id_inscri FROM userdata_nb_jour
WHERE nb_jour>='31'
UNION
SELECT id_inscri FROM userdata_last
WHERE last<='2013-04-07'
AND last>='2013-04-03' ;
Run Code Online (Sandbox Code Playgroud)
我该如何优化?
- - - 更多细节
解释查询的输出:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY userdata_langue ref id_langue id_langue 1 const 398846 Using index
2 UNION userdata_sexe ref sexe sexe 1 const 1667137 Using index
3 UNION userdata_nb_jour range nb_jour nb_jour 2 NULL 5830 Using where; Using index
4 UNION userdata_last range last last 3 NULL 371614 Using where; Using index
NULL UNION RESULT <union1,2,3,4> ALL NULL NULL NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
显示创建表
Table Create Table
userdata_langue CREATE TABLE `userdata_langue` (
`id_inscri` bigint(20) NOT NULL,
`id_langue` tinyint(3) unsigned NOT NULL,
PRIMARY KEY (`id_inscri`),
KEY `id_langue` (`id_langue`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)
小智 -2
考虑使用UNION ALL
. 它应该比 快得多UNION
,但它会为满足多个条件的玩家返回重复的行。
如果您可以处理应用程序代码中的重复项,那么这可能是优化查询的好方法。
归档时间: |
|
查看次数: |
6667 次 |
最近记录: |