parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

Sanja (v.2) 02.06.2002 12:25

Для структуры и для данных у меня одна таблица. Так MySQL устроен.
#
# Table structure for table 'forum'
#

CREATE TABLE `forum` (
  `cid` int(11) NOT NULL auto_increment,
  `pid` int(11) NOT NULL default '0',
  `tid` int(11) NOT NULL default '0',
  `subject` varchar(255) default NULL,
  `postdate` datetime NOT NULL default '0000-00-00 00:00:00',
  `author` varchar(255) NOT NULL default '',
  `cookie` varchar(255) NOT NULL default 'oldforum',
  `ipaddr` varchar(255) NOT NULL default 'oldforum',
  `email` varchar(255) default NULL,
  `message` text,
  `subscribe` enum('yes','no') NOT NULL default 'no',
  PRIMARY KEY  (`cid`),
  KEY `idx_forum_tid` (`tid`),
  KEY `idx_forum_pid` (`pid`),
  KEY `idx_forum_author` (`author`)
) COMMENT='Forum database';
Ведь разумней держать и использовать еще одну таблицу, чем делать несколько запросов
Для меня - не всегда. Извращаться можно по-разному. Вот на этом форуме, например, тексты реплик вынесены в отдельную таблицу для увеличения скорости выборок - не нужно вытаскивать столбец с текстом просто для того, чтобы убедиться, что он непустой. Таблица с рейтингом авторов тоже хранится отдельно.

Вопрос в том, что на реализацию каждого такого извращения уходит время. Моё время, которое небесплатное. И если я в каком-то случае проиграю на треть секунды в скорости или упущу в изяществе кода, я выиграю часа три на реализации. При этом я, естественно, отдаю себе отчёт в том, где на оптимизацию можно положить с прибором, а где - категорически нельзя.

А проблему я решил просто - делаю выборку топ-10 авторов с использованием GROUP BY, менюшу их и складываю полученное число в переменную, затем делю его на значение select count(*) from forum. Одного красивого SQL-запроса по это не придумалось, ну и хер с ним. Поскольку страница, на которой это сделано, вызывается нечасто, я стерплю то, что это сделано неэффективно.