首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL速度太慢,无法执行查询

问MySQL速度太慢,无法执行查询
EN

Stack Overflow用户
提问于 2016-12-22 18:22:17
回答 2查看 267关注 0票数 0

我有一个表"user_values“,有20多万行。表如下所示:

代码语言:javascript
复制
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每天在这个表中写入大约一百万行。

我有一个SELECT查询来获取每个用户的最后一个'value‘:

代码语言:javascript
复制
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服务器已经消失“,因为查询太慢了。

我也试着创建分区: 100个分区按hash(id),但我没有解析,我想现在更慢了。

有人建议我买一台功能强大的服务器,但我认为我没有解决这个问题。有人建议我创建一个mysql“集群”主备。

您是否有其他建议或更好的查询或更好的mysql配置?

EN

回答 2

Stack Overflow用户

发布于 2016-12-22 18:35:13

从mysqli中的数据库获取最后一次插入id

代码语言:javascript
复制
$sql = "YOUR INSERT QUERY";
if ($conn->query($sql) === TRUE) {
    $last_id = $conn->insert_id;
}

使用上一个用户id获取值

代码语言:javascript
复制
$sql2 = "SELECT `value` FROM tablename where `id`=$last_id ; 
$value = $conn->query($sql2);
echo "Value of last user is $value"

通过PDO获取上次插入id

代码语言:javascript
复制
    $sql = "YOUR INSERT QUERY";
    $conn->exec($sql);
    $last_id = $conn->lastInsertId();

使用上一个用户id获取值

代码语言:javascript
复制
$sql2 = "SELECT `value` FROM tablename where `id`=$last_id ; 
$value = $conn->query($sql2);
echo "Value of last user is $value"
票数 0
EN

Stack Overflow用户

发布于 2016-12-22 19:39:57

代码语言:javascript
复制
id | select_type | table      | type| possible_keys      | key      | key_len | ref   | rows | filtered | Extra                                       |
1  |  PRIMARY    | <derived2> | ALL | NULL               | NULL     | NULL    | NULL  | 53604| 100.00   | Using where; Using temporary; Using filesort|

2  |  DERIVED    |users_values| ref | category,user_date | category | 4       | const | 53604| 100.00   | Using where; Using filesort
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41280827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档