这个问题猜测是索引问题,查阅资料使用 force index 解决
# DEV_INFO 表数据量 5 千万级别,DEV_ID 唯一索引,C_TIME 普通索引
sql> SELECT DEV_INFO FROM DEVICE_INFO WHERE DEV_ID = "500000022" ORDER BY C_TIME DESC limit 1;
结果:太慢了 直接 timeout 了
sql> SELECT DEV_INFO FROM DEVICE_INFO FORCE INDEX(DEV_ID) WHERE DEV_ID = "500000022" ORDER BY C_TIME DESC limit 1;
结果:1 row retrieved starting from 1 in 106 ms (execution: 94 ms, fetching: 12 ms)
明明应该能查出 13 条数据,结果只有 12 条记录,我确定少的那个 ID 82985 数据库中存在
# (里面有 13 个 ID)
sql> select * from POINT where ID in (82925,82909,82905,82901,82929,82981,82979,82977,82975,82983,92985,83013,83005);
结果:12 rows retrieved starting from 1 in 87 ms (execution: 55 ms, fetching: 32 ms)
sql> select * from POINT WHERE ID=82985;
结果:1 row retrieved starting from 1 in 83 ms (execution: 58 ms, fetching: 25 ms)
我想到这些问题应该都是 MySQL 执行的问题
所以 我想系统的学习一下 sql 深一点的知识,有没有推荐的 教程或者书籍
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.