我需要从我们的 MySQL-DB 中获取一些统计信息,并想知道是否有更快的方法来执行此操作。
基本上,在包括按属性分隔之前,我需要有关任何给定月份的用户注册信息。
例如:
SELECT count(*) AS c
FROM `users`
WHERE `date_created` LIKE '2015-10%'
AND `country` = 'DE'
这将返回 2015 年 10 月的数字。如何更改此语句以在一个语句中返回所有月份的结果?
我也有兴趣添加类似的东西AND confirmed = 1
作为单独的结果。
这是否可能只使用一个 MySQL 语句?
要让它运行得更快,需要做两件事:
获取合适的索引
没有
confirmed = 1
,你需要有了它,你需要
避免在函数中隐藏日期
LIKE '2015-10%'
不能在 上使用索引date_created
,也不能MONTH(date_created)
,所以让我们重新编写查询:(这假设它
date_created
是一个DATETIME
或TIMESTAMP
数据类型。)所有月份
这个查询仍然可以使用我建议的两个索引,但是,它不一定会使用该
date_created
部分。注意事项
country_code
定义模式(请提供
SHOW CREATE TABLE
)的一个常见错误是将其定义为CHAR(2)
并默认为 utf8。这导致使用 6 个字节,而 2 就足够了。更改为CHAR(2) CHARACTER SET ascii
。