Я еще только изучаю php и mysql. Есть база:
CREATE TABLE `site_posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`img` varchar(255) NOT NULL,
`tags` tinytext NOT NULL,
`views` int(11) NOT NULL,
`shows` int(11) NOT NULL,
`ctr` float NOT NULL,
`status` char(16) NOT NULL,
PRIMARY KEY (`id`),
KEY `status` (`status`),
KEY `ctr` (`ctr`),
KEY `shows` (`shows`),
KEY `views` (`views`),
KEY `title` (`title`)
) ENGINE=InnoDB
На страницах делаю вывод постов по уменьшению ctr. Потом увеличиваю показ на 1 и пересчитываю ctr.
SELECT * FROM site_posts WHERE status='on' ORDER BY ctr DESC LIMIT 50;
UPDATE site_posts SET shows = shows + 1 WHERE id IN ($ids);
UPDATE site_posts SET ctr = (views/shows) WHERE id IN ($ids);
Решил вынести views, shows и ctr в отдельную таблицу.
CREATE TABLE `site_ctr` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`views` int(11) NOT NULL,
`shows` int(11) NOT NULL,
`ctr` float NOT NULL,
PRIMARY KEY (`id`),
KEY `ctr` (`ctr`),
KEY `views` (`views`),
KEY `shows` (`shows`)
) ENGINE=InnoDB
Теперь делаю вывод и подсчеты так:
SELECT * FROM site_posts, site_ctr WHERE site_posts.id = site_ctr.id AND status='on' ORDER BY ctr DESC LIMIT 35;
UPDATE site_ctr SET shows = shows + 1 WHERE id IN ($ids);
UPDATE site_ctr SET ctr = (views/shows) WHERE id IN ($ids);
Стало работать на порядок медленней. Почему?
Получается, что не надо выносить views, shows и ctr в отдельную таблицу?
Или я что-то делаю не так?