博客
关于我
MySQL 异步查询提高查询速度
阅读量:432 次
发布时间:2019-03-05

本文共 1420 字,大约阅读时间需要 4 分钟。

MySQL 异步查询概述

MySQL 异步查询是一种高效的数据处理方式,通过同时处理多个查询请求来提升性能。这种机制特别适合需要快速响应的应用场景。

MySQL 异步查询的优缺点

优点

  • 提升查询速度:异步查询通过并行处理减少了等待时间,能够显著缩短响应时间。
  • 扩展能力强:支持大量并发请求,适合高并发场景。

缺点

  • 资源占用:每次启动异步查询会创建新的线程,可能增加 CPU 和内存负载。
  • 复杂性增加:开发和维护异步查询需要更高的技术门槷。

MySQL 异步查询的实战示例

背景

在处理 100 万数据的 40 张分表时,传统的Union All视图需要 20 多秒,而异步查询能够在 1 秒内完成。

实现方法

主要使用 mysqli_pollreap_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/

你可能感兴趣的文章
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>