skyboy
V2EX  ›  问与答

SQL 语句的执行时间太久

  •  
  •   skyboy · Dec 3, 2016 · 3773 views
    This topic created in 3634 days ago, the information mentioned may be changed or developed.

    请问 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)

    8 replies  •  2016-12-04 00:41:14 +08:00
    buxingjie
    buxingjie
    Dec 3, 2016
    1
    你的语句和 select * from students order by id desc limit 1 有什么区别
    bqbkbz
    bqbkbz
    Dec 3, 2016
    2
    id 有索引吗?
    shiny
    shiny
    Dec 3, 2016 via iPhone
    3
    不至于这么慢,可以贴 explain 的结果
    akira
    akira
    Dec 3, 2016
    4
    order by id desc limit 1 的话,可以试试直接取 max(id)
    billlee
    billlee
    Dec 3, 2016
    5
    你的 name 没索引吧?另外在字符串类型上做 JOIN 是效果比较差的,最好避免
    还有,除非确定子查询的方式能比 JOIN 快,能写成 JOIN 的操作不要写成子查询,数据库很难对子查询做优化。
    至于 SQL 语句的执行时间多长能接受,你想想自己浏览网页的时候能等多久就知道了,一般也就 3 到 5 秒吧。
    正常情况下执行一个简单查询应该是 < 1 s 的, MongoDB 的默认慢查询日志阈值是 100 ms.
    rogwan
    rogwan
    Dec 4, 2016 via Android
    6
    大数据量的查询,最好还是要异步执行吧。除非用户对数据结果返回又要快,又要极高的实时性,否则,为每个用户 5 分钟异步查询好队列, redis 缓存着待用户来取。社交类的 newsfeed 基本上都是这样搞的,临时查数据,没人吃的消
    ivvei
    ivvei
    Dec 4, 2016
    7
    为什么要查两遍……
    iyaozhen
    iyaozhen
    Dec 4, 2016
    8
    不应该呀,一楼的 [select * from students order by id desc limit 1] 应该非常快
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2003 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 13:18 · PVG 21:18 · LAX 05:18 · JFK 08:18
    ♥ Do have faith in what you're doing.