|
|
|
| сегодня от мастерхоста пришли письмо:
Уведомляем Вас, что работой базы данных MySQL создается повышенная нагрузка насервер баз данных
запрос (выводит 10 последних комментариев):
(SELECT
j.ID,
j.Date,
"journals" AS Code,
j.Title,
"" AS e1,
"" AS e2,
u.ID AS User_id,
u.Nick, u.FName,
u.LName
FROM ru_journals AS j
INNER JOIN ru_users AS u
ON j.User_id = u.ID
WHERE
j.Hide = 0 AND
u.Hide = 0)
UNION
(SELECT
ID,
Date,
"items" AS Code,
Title,
"" AS e1,
"" AS e2,
"" AS User_id,
"" AS Nick,
"" AS FName,
"" AS LName
FROM ru_items
WHERE Hide = 0)
UNION
(SELECT
c.ID,
c.Date,
"comments" AS Code,
c.Text AS Title,
"" AS e1,
"" AS e2,
u.ID AS User_id,
u.Nick,
u.FName,
u.LName
FROM ru_comments AS c
INNER JOIN ru_users AS u
ON c.User_id = u.ID
WHERE
c.Hide = 0 AND
u.Hide = 0 AND
c.Code != "reportages")
UNION
(SELECT
fm.ID,
fm.Date,
"messages" AS Code,
fm.Text AS Title,
fm.Topic_id AS e1,
ft.Title AS e2,
u.ID AS User_id,
u.Nick,
u.FName,
u.LName
FROM
ru_f_messages AS fm
INNER JOIN ru_f_topics AS ft
ON fm.Topic_id = ft.ID
INNER JOIN ru_users AS u
ON fm.User_id = u.ID
WHERE
fm.Hide = 0 AND
u.Hide = 0)
ORDER BY Date DESC
LIMIT 10;
|
помогите снизить нагрузку на сервер | |
|
|
|
|
|
|
|
для: P@Sol
(10.04.2012 в 19:41)
| | вы предлагаете провести криптографический анализ вашего запроса?
о нагрузке надо думать при проектировке БД
бывают случаи когда "поздно пить боржоми" | |
|
|
|
|
|
|
|
для: Valick
(10.04.2012 в 19:48)
| | все в наших руках;) только подскажите в каком направлении копать. | |
|
|
|
|
|
|
|
для: P@Sol
(10.04.2012 в 20:12)
| | Я вам намекаю на то что надо показать структуру таблиц и указать назначение полей | |
|
|
|
|
|
|
|
для: Valick
(10.04.2012 в 20:55)
| |
CREATE TABLE IF NOT EXISTS `ru_journals` (
`ID` int(10) unsigned NOT NULL auto_increment,
`User_id` mediumint(8) unsigned NOT NULL default '0' COMMENT 'id пользователя',
`Date` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'дата',
`Title` varchar(128) NOT NULL COMMENT 'заголовок',
`Text` text COMMENT 'текст',
`Hide` tinyint(1) NOT NULL default '0' COMMENT 'скрывать',
PRIMARY KEY (`ID`),
KEY `Date` (`Date`),
KEY `Title` (`Title`(16)),
KEY `User_id` (`User_id`),
FULLTEXT KEY `Title_2` (`Title`)
)
CREATE TABLE IF NOT EXISTS `ru_items` (
`ID` mediumint(8) unsigned NOT NULL auto_increment,
`Category_id` smallint(5) unsigned NOT NULL default '0' COMMENT 'id категории статьи',
`Author_id` mediumint(8) unsigned NOT NULL default '0' COMMENT 'id автора статьи',
`Date` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'дата (показывать с)',
`Date_end` datetime NOT NULL default '9999-12-31 23:59:59' COMMENT 'показывать по',
`Title` varchar(128) NOT NULL COMMENT 'заголовок',
`Announce` text NOT NULL COMMENT 'анонс',
`Text` text COMMENT 'текст',
`IsMainVis` tinyint(1) NOT NULL default '0' COMMENT 'показывать на главной',
`Hide` tinyint(1) NOT NULL default '0' COMMENT 'скрывать',
`Pay` tinyint(1) NOT NULL default '0',
`Last_update_user` smallint(5) unsigned NOT NULL default '0' COMMENT 'id пользователя, последним изменявшего запись',
`Last_update_date` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT 'время последнего изменения',
`Last_update_ip` varchar(16) NOT NULL default '0' COMMENT 'ip пользователя, последним изменявшего запись',
PRIMARY KEY (`ID`),
KEY `Date` (`Date`),
KEY `Date_end` (`Date_end`),
KEY `Title` (`Title`(16)),
KEY `Category_id` (`Category_id`),
KEY `Author_id` (`Author_id`),
FULLTEXT KEY `Title_2` (`Title`),
FULLTEXT KEY `Announce` (`Announce`),
FULLTEXT KEY `Text` (`Text`)
)
CREATE TABLE IF NOT EXISTS `ru_comments` (
`ID` int(10) unsigned NOT NULL auto_increment,
`Code` varchar(8) NOT NULL COMMENT 'код раздела, к которому относится комментарий',
`Record_id` int(10) unsigned NOT NULL default '0' COMMENT 'id записи, которой принадлежит комментарий',
`User_id` mediumint(8) unsigned NOT NULL default '0' COMMENT 'id автора комментария',
`Date` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'дата',
`Text` text COMMENT 'текст',
`New` tinyint(1) NOT NULL default '1' COMMENT 'новый комметарий',
`DateEdit` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'дата редактирования',
`DateDel` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'дата удаления комментария',
`Hide` tinyint(1) NOT NULL default '0' COMMENT 'скрывать',
PRIMARY KEY (`ID`),
KEY `Date` (`Date`),
KEY `Record_id` (`Record_id`),
KEY `User_id` (`User_id`),
KEY `Code` (`Code`)
)
CREATE TABLE IF NOT EXISTS `ru_f_topics` (
`ID` mediumint(8) unsigned NOT NULL auto_increment,
`Theme_id` smallint(5) unsigned NOT NULL default '0' COMMENT 'id раздела',
`Title` varchar(64) NOT NULL COMMENT 'название',
`Views` mediumint(8) unsigned NOT NULL default '0' COMMENT 'количество просмотров',
`LastUpdate` int(11) NOT NULL default '0' COMMENT 'дата последнего обновления',
`Close` tinyint(1) NOT NULL default '0' COMMENT 'закрыто',
PRIMARY KEY (`ID`),
KEY `Theme_id` (`Theme_id`)
)
CREATE TABLE IF NOT EXISTS `ru_users` (
`ID` mediumint(9) NOT NULL auto_increment,
`Email` varchar(64) NOT NULL COMMENT 'e-mail',
`Password` varchar(40) NOT NULL COMMENT 'пароль',
`FName` varchar(32) NOT NULL COMMENT 'имя',
`LName` varchar(32) NOT NULL COMMENT 'фамилия',
`Nick` varchar(16) default NULL COMMENT 'никнейм',
`BirthdayDay` tinyint(2) NOT NULL default '0' COMMENT 'день рождения',
`BirthdayMonth` tinyint(2) NOT NULL default '0' COMMENT 'месяц рождения',
`BirthdayYear` smallint(4) unsigned NOT NULL default '0' COMMENT 'год рождения',
`Sex` tinyint(1) NOT NULL default '0' COMMENT 'Пол (1 - мужчина, 2 - женщина)',
`Country_id` smallint(4) unsigned NOT NULL default '0' COMMENT 'id страны',
`Town_id` smallint(5) unsigned NOT NULL default '0' COMMENT 'id города',
`TownOther` varchar(32) NOT NULL COMMENT 'название города',
`Grade_id` tinyint(3) unsigned NOT NULL default '0' COMMENT 'id спортивного разряда',
`About` text COMMENT 'о себе',
`Signature` varchar(128) default NULL COMMENT 'лозунг',
`Signature_forum` varchar(128) NOT NULL default '' COMMENT 'подпись на форуме',
`OptB` tinyint(1) NOT NULL default '0' COMMENT 'настройка "показывать мой день рождения" (0 - всем, 1- друзьям, 2 - никому))',
`OptFr1` tinyint(1) NOT NULL default '0' COMMENT 'настройка "показывать cсписок моих друзей" (0 - всем, 1- друзьям, 2 - никому))',
`OptFr2` tinyint(1) NOT NULL default '0' COMMENT 'настройка "показывать список тех, у кого я в друзьях" (0 - всем, 1- друзьям, 2 - никому))',
`OptM` tinyint(1) NOT NULL default '0' COMMENT 'настройка "позволять отправлять мне сообщения" (0 - всем, 1- друзьям, 2 - никому)',
`OptF` tinyint(1) NOT NULL default '0' COMMENT 'настройка "позволять комментировать мои фото" (0 - всем, 1- друзьям, 2 - никому)',
`OptJ` tinyint(1) NOT NULL default '0' COMMENT 'настройка "позволять комментировать мой дневник" (0 - всем, 1- друзьям, 2 - никому)',
`OptJ2` tinyint(1) NOT NULL default '0' COMMENT 'настройка "показывать мой дневник" (0 - всем, 1- друзьям, 2 - никому))',
`OptSM` tinyint(1) NOT NULL default '0' COMMENT 'настройка "получать уведомления о новых сообщениях" (0 - да, 1 - нет)',
`OptSCF` tinyint(1) NOT NULL default '0' COMMENT 'настройка "получать уведомления о новых комментариях к фотографиям" (0 - да, 1 - нет)',
`OptSCJ` tinyint(1) NOT NULL default '0' COMMENT 'настройка "получать уведомления о новых комментариях в дневнике" (0 - да, 1 - нет)',
`OptSFr` tinyint(1) NOT NULL default '0' COMMENT 'настройка "получать уведомления о том, что меня добавили в друзья" (0 - да, 1 - нет)',
`OptAJ` tinyint(1) NOT NULL default '1' COMMENT 'настройка "Показывать расширенную панель управления при добавлении записи в дневник" (0 - да, 1- нет)',
`LastTimeOnline` int(11) NOT NULL COMMENT 'время последнего нахождения онлайн',
`Ban` tinyint(1) NOT NULL default '0' COMMENT 'бан',
`BanForum` datetime NOT NULL default '0000-00-00 00:00:00' COMMENT 'бан на форуме (до какого момента)',
`Hide` tinyint(1) NOT NULL default '0' COMMENT 'блокировка пользователя',
PRIMARY KEY (`ID`),
UNIQUE KEY `Email` (`Email`),
KEY `Country_id` (`Country_id`),
KEY `City_id` (`Town_id`),
KEY `Grade_id` (`Grade_id`),
KEY `FName` (`FName`(8)),
KEY `LName` (`LName`(8)),
KEY `TownOther` (`TownOther`(8)),
FULLTEXT KEY `FName_2` (`FName`),
FULLTEXT KEY `LName_2` (`LName`),
FULLTEXT KEY `Nick` (`Nick`),
FULLTEXT KEY `Signature` (`Signature`)
)
|
| |
|
|
|
|
|
|
|
для: P@Sol
(10.04.2012 в 23:19)
| | у меня видеться два варианта решения, простой и сложный. Простой разбить запрос на несколько мелких. Сложный - создать таблицу, в которую будут заноситься 10 последних комментариев.
что скажите? | |
|
|
|
|
|
|
|
для: P@Sol
(10.04.2012 в 23:27)
| | Ну такую буферную доп таблицу я неоднократно предлогал тут на форуме
И это не так сложно как кажется
_
завтра гляну что можно придумать с запросом по вашим таблица
напишите, что должен вывести запрос
просто 10 последних комментариев? или по 10 последних комментариев к чему либо? | |
|
|
|
|
|
|
|
для: Valick
(10.04.2012 в 23:29)
| | Именно 10 последних коментариев со всего сайта
Комментарий+Кто написал+где написал (статья, форум, дневник) | |
|
|
|
|
|
|
|
для: P@Sol
(11.04.2012 в 11:23)
| | трудновато без данных, и свободного времени крайне мало
`Code` varchar(8) NOT NULL COMMENT 'код раздела, к которому относится комментарий',
это поле как-то связано с таблицами, или там просто код для выбора раздела средствами РНР?
по идее одно поле не может быть связано с тремя таблицами
подозреваю что там имя таблицы прописано, это не есть хорошо | |
|
|
|
|
|
|
|
для: Valick
(13.04.2012 в 09:57)
| | не понял вопрос. исходя из запроса в первом сообщении, Code может быть journals, message, items, comments. Это связано и с таблицами и с типами страниц. | |
|
|
|
|
|
|
|
для: P@Sol
(13.04.2012 в 15:42)
| | Я: подозреваю что там имя таблицы прописано, это не есть хорошо
Вы: Code может быть journals, message, items, comments
я оказался прав | |
|
|
|
|
|
|
|
для: Valick
(13.04.2012 в 21:42)
| | чем это плохо? | |
|
|
|
|
|
|
|
для: P@Sol
(14.04.2012 в 16:49)
| | а вам уведомления от хостера мало? | |
|
|
|
|
|
|
|
для: Valick
(14.04.2012 в 17:26)
| | при чем тут хранение имени раздела в таблице и сооббщение от хостера??? | |
|
|
|
|
|
|
|
для: P@Sol
(14.04.2012 в 20:12)
| | при чем тут хранение имени раздела в таблице и сооббщение от хостера???
неправильная организация базы данных, ведет к невозможности написания правильных запросов к ней. | |
|
|
|
|
|
|
|
для: P@Sol
(11.04.2012 в 11:23)
| | оказывается не все так просто. выводиться не просто 10 последних комментариев, но и среди этих 10 и новые записи. т.е. в code
comment - новый комментарий
message - новая тема на форуме
item - новая статья
journal - новая запись в дневнике | |
|
|
|
|
|
|
|
для: P@Sol
(14.04.2012 в 20:22)
| | так и не смогли придумать решение проблемы? | |
|
|
|
|
|
|
|
для: P@Sol
(20.04.2012 в 17:51)
| | ну самый простой вариант, это делать отдельную выборку по каждой таблице с лимитом три последних записи
второй вариант сделать отдельную таблицу в 10 строк куда дублировать записи из этих таблиц
третий вариант это достаточно серьезная реорганизации БД, но я не уверен, что родился такой человек который возьмется за это, проще по моему организовать новую БД с учетом обновленного ТЗ | |
|
|
|
|
|
|
|
для: Valick
(20.04.2012 в 18:08)
| | менять структуру из-за одного запроса нелогично.
поступил еще проще. Повысил порог нагрузки, изменив тарифный план) Клиент выбрал этот вариант:( | |
|
|
|
|