現在、UPDATE pages SET hits = hits+1 WHERE id=:id
を使用してPDOでページヒットをインクリメントしていますが、スクリプトのプロファイリング中に平均で30ms & 65msを更新します。例えば、ダンプここ されています: mySQL - ページビューをより速くインクリメントする方法は?
hits
は、テーブル内のインデックスで、インクリメントするより高速な方法があります
[queries] => Array
(
[0] => Array
(
[sql] => SELECT * FROM `settings`
[time] => 0.22602081298828
)
[1] => Array
(
[sql] => SELECT * FROM `menu_links` WHERE `active`="1" ORDER BY position ASC
[time] => 0.2291202545166
)
[2] => Array
(
[sql] => SELECT * FROM `pages` WHERE `url`=:field AND active='1'
[time] => 0.27203559875488
)
[3] => Array
(
[sql] => SELECT * FROM `pages` WHERE `menu_link`=:field AND active='1'
[time] => 0.24008750915527
)
[4] => Array
(
[sql] => UPDATE pages SET hits = hits+1 WHERE id=:id
[time] => 31.989107131958
)
)
UPDATE
それは思わLIMIT 1句を使用して10〜15msでスピードアップしました。
[4] => Array
(
[sql] => UPDATE `pages` SET hits = hits+1 WHERE id=1 LIMIT 1
[time] => Between 15 & 25ms
)
LOW_PRIORITY
[4] => Array
(
[sql] => UPDATE LOW_PRIORITY `pages` SET hits = hits+1 WHERE id=1 LIMIT 1
[time] => Between 17 & 30ms
)
ページテーブルにはどのくらいの行がありますか。 IDはインデックスに登録されていますか?一般に、更新は読み取りに比べて数桁遅いです。 –
現在、1つの行しかありません。インデックス番号が –
です。これ以上のことはできません。 http://dev.mysql.com/doc/refman/5.0/ja/update-speed.html –