0

如何提高使用 PHP 在 mysql 表中查询的速度?

因为截至目前我有 152000 条记录,每次加载时我的页面都不会打开。只是一个白屏。我还添加了一些索引,但它并没有增强我的表查询。这是我的表结构:

CREATE TABLE `items` (
`itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`itemcode` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_bin',
`itemname` VARCHAR(500) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`itemdesc` VARCHAR(512) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`itembrand` VARCHAR(128) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`itemunit` VARCHAR(45) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`salescatid` INT(10) UNSIGNED NULL DEFAULT NULL,
`salescatname` VARCHAR(128) NULL DEFAULT NULL COLLATE 'latin1_swedish_ci',
`entrydate` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`itemid`),
INDEX `itemcode` (`itemcode`),
INDEX `itemname` (`itemname`),
INDEX `itemdesc` (`itemdesc`),
INDEX `itembrand` (`itembrand`),
INDEX `itemunit` (`itemunit`),
INDEX `salescatid` (`salescatid`),
INDEX `salescatname` (`salescatname`),
INDEX `entrydate` (`entrydate`)
)

COLLATE='utf8_bin'
ENGINE=MyISAM
AUTO_INCREMENT=157329;

加载缓慢的示例查询

SELECT itemid,itemcode,itemname FROM items ORDER BY itemid DESC
4

1 回答 1

2

白屏表示 PHP 错误或超时(HTTP 代码 500,检查日志)。

超时更可能出现,因为通过网络复制 150k 行并发送到浏览器需要很长时间,而不是从数据库中选择。

您也可能会遇到内存问题。

分页是我可以想象的一个很好的方法来帮助你。

在大多数常见的 PHP 版本中,错误报告默认是关闭的。

将这些行放在脚本顶部以启用它:

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

要获取您的 PHP 设置,请使用<?php phpinfo(); ?>

浏览您需要减少发送到浏览器的数据的评论(如 Brenton Alker 提到的)。

除了分页,您还可以使用延迟加载技术(请参阅此Lazy loading SELECT element options w/jquerymobile、c# 和 asp.net)并通过 ajax 过滤以加载较小的部分或使用typeahead而不是选择框。

想象一下,在如此大的选择/下拉框中很难找到选项。尝试其他表单元素和方法来选择一个选项。

于 2013-09-05T08:38:11.093 回答