統計情報を格納するテーブルがあります。現時点では、1日の終わりに約1,000万行が移入され、毎日の統計表にコピーされて削除されます。このため、私は自動インクリメントの主キーを持つことはできません。このDBテーブルの最適なインデックスは何ですか?
これは、テーブルの構造である:
CREATE TABLE `stats` (
`shop_id` int(11) NOT NULL,
`title` varchar(255) CHARACTER SET latin1 NOT NULL,
`created` datetime NOT NULL,
`mobile` tinyint(1) NOT NULL DEFAULT '0',
`click` tinyint(1) NOT NULL DEFAULT '0',
`conversion` tinyint(1) NOT NULL DEFAULT '0',
`ip` varchar(20) CHARACTER SET latin1 NOT NULL,
KEY `shop_id` (`shop_id`,`created`,`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
私はshop_id, created, ip
のキーを持っていますが、私はそれ以上の検索速度を向上させるために最適なインデックスを作成するために使用すべきかの列わからないんだけど?その上の結果の小さなセットを返すとなる最初の列を、あなたのWHERE句で
SELECT DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane')) AS `date`, COUNT(*) AS `views`
FROM `stats`
WHERE `created` <= '2017-07-18 09:59:59'
AND `shop_id` = '17515021'
AND `click` != 1
AND `conversion` != 1
GROUP BY DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane'))
ORDER BY DATE(CONVERT_TZ(`created`, 'UTC', 'Australia/Brisbane'));
次に、where句にshop_idを作成してからクリックするなどしています。 同じ順序でインデックスを作成します。 – money
KEY created_shopid_click_conversion(作成、ショップID、クリック、コンバージョン); – money