最近、memcache にキャッシュする前のクエリの処理に時間がかかっています。この例では、10 秒かかりました。この場合、私がやろうとしているのは、最新の 10 件のヒットを取得することだけです。
125,592 行すべてをロードして 10 行しか返さないような気がしますが、そうですか?
# User@Host: root[root] @ localhost [] # Query_time: 10 Lock_time: 0 Rows_sent: 10 Rows_examined: 125592 SELECT * FROM ヒット WHERE キャンペーン ID = 30 ORDER BY ID DESC LIMIT 10;
別の遅いクエリを次に示します。
# 時間: 090214 5:00:40 # User@Host: root[root] @ localhost [] # Query_time: 3 Lock_time: 0 Rows_sent: 1 Rows_examined: 128879 SELECT count(DISTINCT(ip_address)) AS count_distinct_ip_address FROM `hits` WHERE (campaign_id = 30);
phpMyAdmin でクエリを実行すると、1.3395 秒かかります。実行するSELECT * FROM hits
だけで0.0001秒しかかかりませんが。すべてのヒットを返すのに、それらを並べ替えるよりも時間がかからないのは非常に奇妙だと思いますか、それとも単に並べ替えているだけですか?
私のテーブルを見たい人のために:
CREATE TABLE `ヒット` ( `id` int(11) unsigned NOT NULL auto_increment, `hostname` varchar(255) NOT NULL, `url` tinytext NOT NULL, `user_agent` tinytext NOT NULL, `created_at` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP, `ip_address` varchar(15) NOT NULL, `campaign_id` int(11) NOT NULL, 主キー (`id`)、 KEY `campaign_id` (`campaign_id`), KEY `ip_address` (`ip_address`) );