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、ログを確認) を意味します。

DB から選択するのではなく、ネットワーク経由で 15 万行をコピーしてブラウザに送信するのに時間がかかるため、タイムアウトが発生する可能性が高くなります。

また、メモリの問題が発生する可能性もあります。

ページネーションは、私が想像できる良いアプローチです。

ほとんどの一般的な PHP バージョンでは、エラー報告はデフォルトでオフになっています。

スクリプトを有効にするには、スクリプトの先頭に次の行を追加します。

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

PHP 設定を取得するには、次を使用します。<?php phpinfo(); ?>

ブラウザに送信されるデータを減らすために必要なコメントを確認します (Brenton Alker が言及したように)。

ページネーションに加えて、遅延読み込み手法 (この遅延読み込み SELECT 要素オプション w/ jquerymobile、c#、および asp.net を参照) と ajax によるフィルタリングを使用して、より小さな部分を読み込むか、選択ボックスの代わりに先行入力を使用できます。

このような大きな選択/ドロップダウン ボックスでオプションを見つけるのが非常に難しいと想像してみてください。他のフォーム要素とオプションを選択する方法を試してください。

于 2013-09-05T08:38:11.093 に答える