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