0

私はローカルマシンを使用しています。挿入|作成|削除後に初めてページをロードしたときにのみ、このエラーが発生します。その後、非常に高速にロードされます。次に、データベースを変更すると、最初に(場合によっては2回目)ページにアクセスしたときにそのエラーが発生します。理解できません。

データベースを変更した後、初めてサイトにアクセスしたときにのみエラーが発生するのはなぜですか?

$sth = $this->dbh->prepare("SELECT g.t_tree_c_parent AS gp ,h.t_tree_c_parent AS hp
                FROM t_tree a INNER JOIN (t_data b, t_data c, t_tree d, t_data e, t_data f, t_tree g, t_tree h, t_tree i) 
                ON a.t_tree_c_child=b.t_data_c_space
                AND b.t_data_c_object=c.t_data_c_object
                AND c.t_data_c_space=d.t_tree_c_child
                AND d.t_tree_c_parent=e.t_data_c_object
                AND e.t_data_c_space=f.t_data_c_object
                AND f.t_data_c_space=g.t_tree_c_child
                AND g.t_tree_c_parent=h.t_tree_c_child
                AND e.t_data_c_space=i.t_tree_c_child
                AND i.t_tree_c_parent=?
                WHERE a.t_tree_c_child=?");
$sth->execute(array($this->glob['children'], $child)); //  <- LINE:183

そのクエリを分割してテストします。しかし、私は多分私が何かを逃していると尋ねています。

@ jcho360によって尋ねられた更新:

CREATE TABLE `t_data` (
`t_data_c_space` VARCHAR(50) NOT NULL DEFAULT '0.00000000000',
`t_data_c_object` VARCHAR(50) NULL DEFAULT NULL,
`t_data_c_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`t_data_c_space`)
 )
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

CREATE TABLE `t_tree` (
`t_tree_c_parent` VARCHAR(50) NOT NULL,
`t_tree_c_child` VARCHAR(50) NOT NULL,
`t_tree_c_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

子のHeidiSQLでは(プロジェクトでは、このクエリは再帰関数にあります):

dbでの小さな更新後、最初は2.137秒、その後0.000秒

私はそれがLeandroBarretoによって提案されたmysqlキャッシングだと思い始めました。

4

1 に答える 1

1

ここで大げさな推測をします: データベースのキャッシング。

ページを初めて実行するとき、クエリはデータベースにキャッシュされないため、時間がかかり、PHP の時間制限が切れます。

それ以外の場合、クエリははるかに高速です。

前述のようにクエリを分割するか、スクリプトの制限時間を増やしてみることができます。

set_time_limit(0); //No time limit
set_time_limit(60); //60 seconds

確かに、これを使用してデータベースキャッシュを消去し、常に使用して、常にクリーンなキャッシュでページを実行することができます。

于 2012-11-29T13:47:19.077 に答える