本文共 1420 字,大约阅读时间需要 4 分钟。
MySQL 异步查询是一种高效的数据处理方式,通过同时处理多个查询请求来提升性能。这种机制特别适合需要快速响应的应用场景。
在处理 100 万数据的 40 张分表时,传统的Union All视图需要 20 多秒,而异步查询能够在 1 秒内完成。
主要使用 mysqli_poll 和 reap_async_query 扩展方法。通过循环执行多个查询,立即返回处理。
$table_separate_cnt = 40;$sqls = [];for ($i = 0; $i < $table_separate_cnt; $i++) { $sql = 'select * from news' . $i; array_push($sqls, $sql);}$links = [];foreach ($sqls as $sql) { $link = mysqli_connect($hostname, $username, $password, 'test', '3306'); $link->query($sql, MYSQLI_ASYNC); $links[$link->thread_id] = $link;}$process = 0;$res = [];do { $r_array = $e_array = $reject = $links; if (!($ret = mysqli_poll($r_array, $e_array, $reject, 2))) { continue; } foreach ($r_array as $link) { if ($result = $link->reap_async_query()) { $r = $result->fetch_array(); if ($r) { $res[] = $r; } if (is_object($result)) { mysqli_free_result($result); } unset($links[$link->thread_id]); $link->close(); $process++; } } foreach ($e_array as $link) { die; } foreach ($reject as $link) { die; }} while ($process < $llen); MySQL 异步查询通过并行处理提升了性能,尤其适合高并发场景。但需要权衡资源消耗和复杂性。
转载地址:http://enuzz.baihongyu.com/