我的桌子增长很快,目前它有47000000多行。
即使是非常简单的查询,有时也需要 46 秒。
SELECT id, userId, visitorId, date FROM user_views LIMIT 20000000, 1;
表结构是:
Field Type Null Key Default Extra
id int(11)unsigned NO PRI NULL auto_increment
userId int(11)unsigned NO MUL NULL
visitorId int(11) NO MUL NULL
date datetime NO MUL NULL
应用程序已经运行了1个主服务器和6个从服务器。无法承受更多实例。
在id
上有btree索引有没有办法让它更快?
由于
答案 0 :(得分:2)
首先,您应该考虑使用不同的存储方法。根据您的使用情况,关系数据库可能不是最佳选择。例如。如果99%的操作都写入表但没有更新现有记录(列名称建议的内容),那么nosql数据库可能会更好地执行。
其次,在没有任何特定订单标准的情况下跳过20000000行(基于当然的索引)使DBMS可以应用任意顺序,这可能不是最理想的。
我不了解MySQL内部优化机制,但LIMIT仅在构建完整个结果集后应用,这意味着您已将整个表加载到内存中。因此,请尝试使用WHERE语句之前减少结果集的大小限制它。