2017-02-14 9 views
0

Я пишу запрос, который извлекает много миллионов строк из таблицы и помещается в txt-файл.Есть ли все-таки, чтобы проверить время выполнения (прошедшее или оставшееся) для «ВЫБРАТЬ ... ВХОДИТЬ» в php mysql?

$sQuery = " ("; 
     $sQuery .= " SELECT number "; 
     $sQuery .= " INTO OUTFILE '".$outputfile_dnd."' "; 
     $sQuery .= " FIELDS TERMINATED BY ',' "; 
     $sQuery .= " LINES TERMINATED BY '\r\n' "; 
     $sQuery .= " FROM `".$database."`.$temp_table_name"; 
     $sQuery .= " WHERE number IN (SELECT number FROM `db_dnd`.`dnd`)"; 
     $sQuery .= ")"; 

Поскольку будут огромные данные, это займет несколько минут времени, чтобы заполнить их иногда. Я хочу, чтобы пользователи знали, сколько времени будет выполняться в процессе (примерно). Я думаю, чтобы держать кнопку в интерфейсе, когда пользователь нажимает кнопку, он должен показывать оставшееся время. Если его невозможно найти оставшееся время, если я могу получить истекшее время и количество выбранных строк, то и его штраф. Любая помощь? Худший случай Я собираюсь пойти с INSERT IN TO в другую таблицу, а затем положить в файл после того, как все вставлено.

+0

Если вы хотите сократить время вашего запроса, вы можете заменить свое 'Where number IN' на соединение. Соединения намного быстрее, чем 'IN', если вы запрашиваете много данных. [См. Здесь] (https://dev.mysql.com/doc/refman/5.7/en/rewriting-subqueries.html) –

ответ

1

Вы можете запустить запрос ajax к скрипту php, когда пользователь нажмет кнопку. Затем вы можете рассчитывать в Javascript, время, пока вы не получите ответ от файла ajax.

Чтобы получить время, прошедшее в PHP вы можете сделать (следующее предполагается, что вы используете MySQLi):

$startTime = microtime(); 
$result = $mysqli->query($sQuery); #This is your function that runs the actual query 
$endTime= microtime(true); 
$timeTaken= $endTime- $startTime; 

Чтобы получить количество строк (в MySQLi), вы можете просто захватить его результата объект.

$numRows = $result->num_rows; 

Edit для Js АЯКС версии:

Так что если у вас есть Jquery на вашем интерфейсе следующее будет работать. Таким образом, это включает разделение всего вашего php, который запускается, и отображает запрос в отдельный файл. Затем вызовите URL-адрес этого файла ниже, и он покажет, как долго прошло до выхода указанного файла.

<script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
    var startTime = new Date().getTime(); 
    var requestInterval = window.setInterval(function() { 
     $("#content_area").html("Time Elapsed :"+(new Date().getTime() - startTime)/1000+" Seconds"); 
    }, 500); 
    jQuery.get('URLofYOURScriptHERE', 
     function(data, status, xhr) { 
      clearInterval(requestInterval) 
      var timeTaken = new Date().getTime() - startTime; 
      $("#content_area").html(data); 
     } 
    ); 
}); 
</script> 
<body> 
<div id="content_area"> 
</div> 
</body> 
+0

Если я не ошибаюсь, то приведенное выше даст общее время, затраченное на выполнение запроса на завершение запроса. Я уже использовал его. Но я хочу получить время, прошедшее во время выполнения запроса, и каким-то образом нужно придумать анализ, сколько времени потребуется для завершения запроса. Любые предложения по этому поводу? – vikram

+0

Я отредактирую ответ с помощью javascript-версии для вас. –

+0

Да, это поможет – vikram