【问题标题】:How to load a data in mysql faster?如何更快地在mysql中加载数据?
【发布时间】:2013-09-05 08:32:20
【问题描述】:

如何提高使用 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

【问题讨论】:

  • 在您的问题中添加您尝试运行的典型查询
  • 请向我们展示您描述为有问题的代码。您是否打开了错误报告?
  • 好的,我更新了我的问题。我有错误报告,但我的浏览器不会告诉我错误。只是一个空白页。但如果我减少我的数据,它将打开。
  • 该查询不应该很慢,它是对索引主键的简单选择。您确定页面的数据库部分速度很慢而不是脚本吗?在这种情况下,空白屏幕可能是 PHP 内存不足,因为您似乎正在将整个表加载到内存中。修复/检查您的错误日志。
  • 好的,如果是 PHP 问题,我该怎么做?如何在 PHP 中增加内存大小?

标签: mysql sql database performance database-performance


【解决方案1】:

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

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

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

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

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

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

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

要获取您的 PHP 设置,请使用 &lt;?php phpinfo(); ?&gt;

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

除了分页之外,您还可以使用 延迟加载 技术(参见 Lazy loading SELECT element options w/ jquerymobile, c# and asp.net)并通过 ajax 过滤来加载较小的部分,或者使用 typeahead 代替选择框。

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

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 2012-12-02
    • 2021-12-26
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多