gpt4 book ai didi

php - 我的请求需要很长时间才能使用 PHP 和 MySQL 显示信息

转载 作者:行者123 更新时间:2023-11-29 07:23:07 24 4
gpt4 key购买 nike

正如标题所说,我遇到了一个简单的 sql 问题:

$sql = "SELECT idFactura, strNombre, intFolio, 
doubleTotal, intTimbrada, intCancelada,
dateFechaHora, intStatus
FROM tbl_factura
WHERE idContador = '".$_SESSION['MM_idContador']."'
AND dateFechaHora BETWEEN '".$_SESSION['MM_Buscar_FechaInicio_F']."'
AND '".$_SESSION['MM_Buscar_FechaFinal_F']."'
AND intTimbrada = 0
AND intCancelada = 0
LIMIT ?,?";

表“tbl_factura”有 40,000 条记录,当单个用户使用系统的该部分时,需要 1 秒(有时 15 秒或更长)才能显示信息,但如果两个或更多用户正在使用该部分,则需要有时1分钟或更长时间,对我来说sql查询很简单,但我不知道问题是什么,传递给sql语句的每个变量都已设置,正如我所说,它可以工作,但当两个或更多用户使用它时速度非常慢,不知道是否与服务器有关。

服务器的操作系统是 Microsoft Windows 6.2,我使用的是 PHP 5.2,MySQL 服务器 5.1 是专用服务器。

我尝试使用不带“LIMIT”的sql语句,结果是一样的,希望您能给我一些想法。

这是我如何连接到数据库:

public function __construct()
{
try {
$this->dbh = new PDO('mysql:host=localhost;dbname=db_name', 'root', 'xxxxx');
$this->dbh->exec("SET CHARACTER SET utf8");
} catch (PDOException $e) {
print "Error!: " . $e->getMessage();
die();
}
}

这里是执行查询的部分代码:

$query = $this->dbh->prepare($sql);
$query->bindValue(1, (int) $offset, PDO::PARAM_INT);
$query->bindValue(2, (int) $limit, PDO::PARAM_INT);
$query->execute();

if($query->rowCount() > 0)
{

return $query->fetchAll();

}

已更新

enter image description here

当我这样做时

SHOW INDEXES FROM tbl_factura;

它显示此信息

enter image description here

最佳答案

正如 @arkascha 已经提到的,您的表上没有 INDEXES 定义,甚至没有主键。因此,为了使其运行得更快,您至少需要定义 SELECT 语句的 WHERE 子句中使用的字段的索引。那将是:

CREATE INDEX idx_idContador ON tbl_factura (idContador);
CREATE INDEX idx_dateFechaHora ON tbl_factura (dateFechaHora);
CREATE INDEX idx_intTimbrada ON tbl_factura (intTimbrada);
CREATE INDEX idx_intCancelada ON tbl_factura (intCancelada);

关于php - 我的请求需要很长时间才能使用 PHP 和 MySQL 显示信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35417486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com