如何使用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
答案 0 :(得分: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# and asp.net)并通过ajax过滤以加载较小的部分或使用 typeahead 而不是选择框
想象一下,在如此大的选择/下拉框中找到选项非常困难。尝试其他表单元素和方法来选择一个选项。