php - MySql 8.0 读取速度
问题描述
我在这里需要一些专业知识,我有一个庞大的 SQL 数据库,可以与我编写的移动应用程序结合使用。我需要很长时间才能从数据库中获取结果,有时会超过 20 到 25 秒。我设法提高了速度,现在检索结果需要 40 秒。我希望有人可能对我如何加快查询速度并在 20 秒内更快地返回结果有所了解。
主表为 4 列 + 1 为“id”列,数据库包含 15,254,543 行数据。目前它被设置为一个 InnoDB,有 4 个索引,大小约为 1.3GB。
我的服务器是 GoDaddy VPS,1 个 CPU,4 GB 内存。这是专用的,我不与其他任何人共享资源,除了一个非常基本的网站之外,它的唯一目的是 SQL 数据库。
请注意,数据库记录数不会变得更大,我真的只需要找出一种更好的方法来更快地返回查询,然后 20 秒。
更详细地说,Android 应用程序通过 php 文档连接到我的网站以查询并返回结果,我认为可能有更好的方法来解决这个问题,这可能是陷阱所在。一个有趣的提示是,当我在 PHP My Admin 中时,我可以在 3 秒内进行搜索并获得结果,这也表明问题可能出在我的 php 文档中。这是我为完成这项工作而编写的下面的 php 文档。
<?php
require "conn.php";
$FSC = $_POST["FSC"];
$PART_NUMBER = $_POST["NIIN"];
$mysql_qry_1 = "select * from MyTable where PART_NUMBER like '$PART_NUMBER';";
$result_1 = mysqli_query($conn ,$mysql_qry_1);
if(mysqli_num_rows($result_1) > 0) {
$row = mysqli_fetch_assoc($result_1);
$PART_NUMBER = $row["PART_NUMBER"];
$FSC = $row["FSC"];
$NIIN = $row["NIIN"];
$ITEM_NAME = $row["ITEM_NAME"];
echo $ITEM_NAME, ",>" .$PART_NUMBER, ",>" .$FSC, "" .$NIIN;
//usage stats
$sql = "INSERT INTO USAGE_STATS (ITEM_NAME, FSC, NIIN, PART_NUMBER)
VALUES ('$ITEM_NAME', '$FSC', '$NIIN', '$PART_NUMBER')";
if ($conn->query($sql) === TRUE) {
$row = mysqli_insert_id($conn);
} else {
//do nothing
}
//
} else {
echo "NO RESULT CHECK TO ENSURE CORRECT PART NUMBER WAS ENTERED ,> | ,>0000000000000";
}
$mysql_qry_2 = "select * from MYTAB where FSC like '$FSC' and NIIN like '$NIIN';";
$result_2 = mysqli_query($conn ,$mysql_qry_2);
if(mysqli_num_rows($result_2) > 0) {
$row = mysqli_fetch_assoc($result_2);
$AD_PART_NUMBER = $row["PART_NUMBER"];
if(mysqli_num_rows($result_2) > 1){
echo ",>";
while($row = mysqli_fetch_assoc($result_2)) {
$AD_PART_NUMBER = $row["PART_NUMBER"];
echo $AD_PART_NUMBER, ", ";
}
} else {
echo ",> | NO ADDITIONAL INFO FOUND | ";
}
} else {
echo ",> | NO ADDITIONAL INFO FOUND | ";
}
mysqli_close($con);
?>
所以我的问题是如何利用我拥有的可用资源提高读取速度,或者我当前的 PHP 文档是否存在导致瓶颈的问题?
解决方案
通过选择已索引的特定列,您将获得更快的读取速度,而不是使用 LIKE。
SELECT * FROM table_name FORCE INDEX (index_list) WHERE condition;
另一个大大加快 Mysql 的事情是在 VPS 服务器上使用 SSD 驱动器。SSD 驱动器将大大减少扫描这么大的数据库所需的时间。
推荐阅读
- node.js - 更新参数渲染视图
- python-3.x - Ssup 和 Sdown 系列
- python - 很好地预测测试集的 SVM 模型仅在新数据集上以 0.982 的概率(对于所有观察值)预测 target=1
- c - 无法将指向字符的指针分配给字符数组
- sql-server - SQL 数据透视表中总行的百分比
- python-3.x - 如果用户指定“-h”,我可以阻止 argparse 退出吗?
- python - Python,使用请求提交按钮
- javascript - 单击浏览器后退按钮Angular时如何将用户重定向到特定页面
- pytorch - 从 `ConcatDataset` 创建的 `DataLoader` 是从不同文件还是单个文件创建批处理?
- python - 如何在Python中从zip()垂直打印出列表