【问题标题】:MySQL execute timeMySQL 执行时间
【发布时间】:2011-06-28 02:00:59
【问题描述】:

我需要一些帮助来缩短此查询的执行时间。对于 1500 行的表来说,7 秒似乎太长了。

  SELECT parent
    FROM video
   WHERE parent NOT IN (SELECT parent
                          FROM video
                         WHERE filename REGEXP '(s[0-9]{2}\e[0-9]{2})|([[:<:]][0-9]{3}[[:>:]])')
GROUP BY parent

【问题讨论】:

  • parent 列是否有索引?在查询中使用正则表达式可能也是它速度慢的一个原因。
  • @datasage:正确,应该是一个答案

标签: mysql sql


【解决方案1】:

首先,您可以使用NOT REGEXP 代替子查询。

SELECT parent
FROM video
WHERE filename NOT REGEXP '(s[0-9]{2}\e[0-9]{2})|([[:<:]][0-9]{3}[[:>:]])'
GROUP BY parent

使用REGEXPNOT REGEXP 时,索引无关紧要。 为了提高效率,如果这还不够,您将不得不考虑使用其他@987654322 @ 或 LIKE 运算符。

【讨论】:

  • 这个正则表达式使用 java 会更快吗?我确实使用正则表达式通过 java 解析了所有内容,为我的数据库留下了干净的数据,但是通过这种使用正则表达式和查询的新方法,我将需要的代码量减少了大约 50%..
  • @aLk:不,Java 永远不会像数据库那样扩展到大型数据集。
  • @aLk - 您可以随时提取 Java 中的所有数据并使用它的函数对数据进行排序。我的建议是尝试使用单个查询(使用NOT REGEXP)并使用Java 对所有数据执行相同的操作并确定执行时间。如果您可以通过命令行运行脚本,time(2) 命令可能会有所帮助。
【解决方案2】:

两件事:

  • 确保 parent 列已编入索引。
  • 删除正则表达式。如果可以,请使用LIKE 或其他string function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2018-01-19
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2012-03-11
    • 2020-11-15
    相关资源
    最近更新 更多