我有一个包含超过 2000 万行的表“user_values”。 表格是这样的:
id | user_id | scan_date | value | category | user_date |
1 | 1 | 2016-12-10 10:10:10 | 10 | 1 | 2016-01-05 11:11:11 |
2 | 2 | 2016-12-10 10:10:10 | 14 | 2 | 2016-02-06 12:12:12 |
3 | 3 | 2016-12-10 10:10:10 | 15 | 2 | 2016-03-07 13:13:13 |
4 | 1 | 2016-12-10 12:10:10 | 11 | 1 | 2016-01-05 10:10:10 |
5 | 2 | 2016-12-10 12:10:10 | 13 | 2 | 2016-02-06 12:12:12 |
6 | 3 | 2016-12-10 12:10:10 | 17 | 2 | 2016-03-07 13:13:13 |
7 | 1 | 2016-12-10 14:10:10 | 13 | 1 | 2016-01-05 11:11:11 |
8 | 2 | 2016-12-10 14:10:10 | 15 | 2 | 2016-02-06 12:12:12 |
9 | 3 | 2016-12-10 14:10:10 | 16 | 2 | 2016-03-07 13:13:13 |
10 | 1 | 2016-12-10 16:10:10 | 18 | 1 | 2016-01-05 11:11:11 |
11 | 2 | 2016-12-10 16:10:10 | 13 | 2 | 2016-02-06 12:12:12 |
12 | 3 | 2016-12-10 16:10:10 | 14 | 2 | 2016-03-07 13:13:13 |
“scan_date”是写入该行的时间。
Mysql 每天在该表中写入大约 100 万行。
我有一个 SELECT QUERY 来获取每个用户的最后一个“值”:
SELECT * FROM (SELECT * FROM user_values
WHERE
category = '2' AND
user_date >= '2016-01-16' AND
user_date <= '2016-12-15 10:34:35'
ORDER BY id DESC LIMIT 999999999) as user_values
WHERE
category = '2' AND
user_date >= '2016-01-16' AND
user_date <= '2016-12-15 10:34:35'
GROUP BY user_values.user_id
查询速度比我发现的更快,但现在我收到错误“MySQL 服务器已消失”,因为查询太慢。
我还尝试创建分区:通过哈希(id)创建100个分区,但我没有解决,我认为现在速度较慢。
有人建议我购买一台功能强大的服务器,但我认为我没有解决问题。 有人建议我创建一个 mysql“集群”主/从。
您还有其他建议或更好的查询或更好的 mysql 配置吗?
最佳答案
从 mysqli 中的数据库获取最后的插入 ID
$sql = "YOUR INSERT QUERY";
if ($conn->query($sql) === TRUE) {
$last_id = $conn->insert_id;
}
使用最后一个用户 ID 获取值(value)
$sql2 = "SELECT `value` FROM tablename where `id`=$last_id ;
$value = $conn->query($sql2);
echo "Value of last user is $value"
通过 PDO 获取最后插入 ID
$sql = "YOUR INSERT QUERY";
$conn->exec($sql);
$last_id = $conn->lastInsertId();
使用最后一个用户 ID 获取值(value)
$sql2 = "SELECT `value` FROM tablename where `id`=$last_id ;
$value = $conn->query($sql2);
echo "Value of last user is $value"
关于MySQL 执行查询太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280827/