如何限制sql执行时间

wor*_*tor 8 mysql sql

有些sql编写得不好.有时,搜索会花费数小时申请.当一个应用程序(可能是一个网站)提交一个运行时间很长的查询时,我必须重新启动mysql.如何在数据库端限制sql查询的执行时间?

Ome*_*esh 8

要在很长的执行时间后自动终止MySQL中的查询:

  1. 创建存储过程:

    DECLARE CURSOR cur1 FOR SELECT ID 
                        FROM INFORMATION_SCHEMA.PROCESSLIST 
                        WHERE COMMAND = 'Query' AND TIME > 120;
    
    Run Code Online (Sandbox Code Playgroud)

    然后在curosr的循环中做:

    FETCH ID INTO @var_kill_id;
    KILL QUERY @var_kill_id;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建EVENT FOR EVERY 5 SECONDS并在CALL其中创建上述过程.

注意:KILL QUERY只会终止查询,并且MySQL连接不会中断.看到这里.