SQL 语句的执行时间太久

2016-12-03 16:27:09 +08:00
 skyboy

请问 SQL 语句执行时间大于多少秒,对于 PHP 页面和用户无意义 。就是说 SQL 的执行时间最好控制在多少秒以内才合适。好像在几千万记录的表中,只有直接查询索引字段,用=号,才能秒级返回,像下面的稍微复杂点的 SQL 语句,其中 name 字段已经做过索引了,但是就要几十秒才返回,这样的 SQL 还有意义吗。我用 php 命令: php test.php 测试执行的 php 文件代码。 select * from students where name=(select name from students order by id desc limit 1)

2797 次点击
所在节点    问与答
8 条回复
buxingjie
2016-12-03 17:23:27 +08:00
你的语句和 select * from students order by id desc limit 1 有什么区别
zhaohui318
2016-12-03 17:27:48 +08:00
id 有索引吗?
shiny
2016-12-03 20:03:20 +08:00
不至于这么慢,可以贴 explain 的结果
akira
2016-12-03 20:51:37 +08:00
order by id desc limit 1 的话,可以试试直接取 max(id)
billlee
2016-12-03 23:54:56 +08:00
你的 name 没索引吧?另外在字符串类型上做 JOIN 是效果比较差的,最好避免
还有,除非确定子查询的方式能比 JOIN 快,能写成 JOIN 的操作不要写成子查询,数据库很难对子查询做优化。
至于 SQL 语句的执行时间多长能接受,你想想自己浏览网页的时候能等多久就知道了,一般也就 3 到 5 秒吧。
正常情况下执行一个简单查询应该是 < 1 s 的, MongoDB 的默认慢查询日志阈值是 100 ms.
rogwan
2016-12-04 00:14:49 +08:00
大数据量的查询,最好还是要异步执行吧。除非用户对数据结果返回又要快,又要极高的实时性,否则,为每个用户 5 分钟异步查询好队列, redis 缓存着待用户来取。社交类的 newsfeed 基本上都是这样搞的,临时查数据,没人吃的消
ivvei
2016-12-04 00:16:26 +08:00
为什么要查两遍……
iyaozhen
2016-12-04 00:41:14 +08:00
不应该呀,一楼的 [select * from students order by id desc limit 1] 应该非常快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/325040

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX