- Автор темы
- #1
Возникла такая потребность. Чисто теоретически - отключить отправку запроса из поисковых форм и модулей + дропнуть индексы у поля полной новости, чтоб места не занимали столько.
engine\ajax\search.php
найти
заменить на
engine\modules\search.php
найти
заменить на
и
найти
заменить на
С базой не смог придумать ничего умнее, чем дампануть ее и заменить
на
в дампе и залить обратно его.
В принцепе работает всё. Т.к. мне ни похожих новостей не надо ни чего то в этом духе, то больше не пилил нигде, но думаю если индексы сносить, убирать поиск по полной новости надо отовсюду без исключения чтоб не получить в обратку всетаки выполнение скриптом поиска, но из за отсутствия индекса он начнет нагрузку давать значительно большую.
Собственно пара вопросов:
1) Больше не надо нигде ничего еще выпиливать?
2) Кто накинет человеческий запрос SQL чтоб не через дамп убирать создание индекса? А то набить быстренько демо базу не проблема, но у меня тут лежит уже реально большая база рабочего сайта, с которой через правку дампа это делать сродни идиотизму будет.
В идеале полная новость на сайте должна только для отображения юзеру выдергиваться и то, если ее нет в актуальном кеше движка. Тоесть хочется снизить нагрузку на БД максимально а поиск по полной новости - как раз и есть очень ненужная и замусоривающая выдачу функция.
engine\ajax\search.php
найти
PHP:
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR full_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");
PHP:
$db->query("SELECT id, short_story, title, date, alt_name, category FROM " . PREFIX . "_post WHERE " . PREFIX . "_post.approve=1".$this_date." AND (short_story LIKE '%{$query}%' OR xfields LIKE '%{$query}%' OR title LIKE '%{$query}%') ORDER by date DESC LIMIT 5");
engine\modules\search.php
найти
PHP:
$titleonly_where = array ('0' => "MATCH(title,short_story,full_story,xfields) AGAINST ('{story}')",
PHP:
$titleonly_where = array ('0' => "MATCH(title,short_story,xfields) AGAINST ('{story}')",
и
найти
PHP:
$titleonly_where = array ('0' => "short_story LIKE '%{story}%' OR full_story LIKE '%{story}%' OR xfields LIKE '%{story}%' OR title LIKE '%{story}%'",
PHP:
$titleonly_where = array ('0' => "short_story LIKE '%{story}%' OR xfields LIKE '%{story}%' OR title LIKE '%{story}%'",
С базой не смог придумать ничего умнее, чем дампануть ее и заменить
Код:
DROP TABLE IF EXISTS `dle_post`;
CREATE TABLE `dle_post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`autor` varchar(40) NOT NULL DEFAULT '',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`short_story` text NOT NULL,
`full_story` longtext NOT NULL,
`xfields` text NOT NULL,
`title` varchar(255) NOT NULL DEFAULT '',
`descr` varchar(200) NOT NULL DEFAULT '',
`keywords` text NOT NULL,
`category` varchar(200) NOT NULL DEFAULT '0',
`alt_name` varchar(200) NOT NULL DEFAULT '',
`comm_num` mediumint(8) unsigned NOT NULL DEFAULT '0',
`allow_comm` tinyint(1) NOT NULL DEFAULT '1',
`allow_main` tinyint(1) unsigned NOT NULL DEFAULT '1',
`approve` tinyint(1) NOT NULL DEFAULT '0',
`fixed` tinyint(1) NOT NULL DEFAULT '0',
`allow_br` tinyint(1) NOT NULL DEFAULT '1',
`symbol` varchar(3) NOT NULL DEFAULT '',
`tags` varchar(255) NOT NULL DEFAULT '',
`metatitle` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `autor` (`autor`),
KEY `alt_name` (`alt_name`),
KEY `category` (`category`),
KEY `approve` (`approve`),
KEY `allow_main` (`allow_main`),
KEY `date` (`date`),
KEY `symbol` (`symbol`),
KEY `comm_num` (`comm_num`),
KEY `tags` (`tags`),
KEY `fixed` (`fixed`),
FULLTEXT KEY `short_story` (`short_story`,`full_story`,`xfields`,`title`)
) ENGINE=MyISAM AUTO_INCREMENT=15 /*!40101 DEFAULT CHARSET=utf8 */;
Код:
DROP TABLE IF EXISTS `dle_post`;
CREATE TABLE `dle_post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`autor` varchar(40) NOT NULL DEFAULT '',
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`short_story` text NOT NULL,
`full_story` longtext NOT NULL,
`xfields` text NOT NULL,
`title` varchar(255) NOT NULL DEFAULT '',
`descr` varchar(200) NOT NULL DEFAULT '',
`keywords` text NOT NULL,
`category` varchar(200) NOT NULL DEFAULT '0',
`alt_name` varchar(200) NOT NULL DEFAULT '',
`comm_num` mediumint(8) unsigned NOT NULL DEFAULT '0',
`allow_comm` tinyint(1) NOT NULL DEFAULT '1',
`allow_main` tinyint(1) unsigned NOT NULL DEFAULT '1',
`approve` tinyint(1) NOT NULL DEFAULT '0',
`fixed` tinyint(1) NOT NULL DEFAULT '0',
`allow_br` tinyint(1) NOT NULL DEFAULT '1',
`symbol` varchar(3) NOT NULL DEFAULT '',
`tags` varchar(255) NOT NULL DEFAULT '',
`metatitle` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `autor` (`autor`),
KEY `alt_name` (`alt_name`),
KEY `category` (`category`),
KEY `approve` (`approve`),
KEY `allow_main` (`allow_main`),
KEY `date` (`date`),
KEY `symbol` (`symbol`),
KEY `comm_num` (`comm_num`),
KEY `tags` (`tags`),
KEY `fixed` (`fixed`),
FULLTEXT KEY `short_story` (`short_story`,`xfields`,`title`)
) ENGINE=MyISAM AUTO_INCREMENT=15 /*!40101 DEFAULT CHARSET=utf8 */;
В принцепе работает всё. Т.к. мне ни похожих новостей не надо ни чего то в этом духе, то больше не пилил нигде, но думаю если индексы сносить, убирать поиск по полной новости надо отовсюду без исключения чтоб не получить в обратку всетаки выполнение скриптом поиска, но из за отсутствия индекса он начнет нагрузку давать значительно большую.
Собственно пара вопросов:
1) Больше не надо нигде ничего еще выпиливать?
2) Кто накинет человеческий запрос SQL чтоб не через дамп убирать создание индекса? А то набить быстренько демо базу не проблема, но у меня тут лежит уже реально большая база рабочего сайта, с которой через правку дампа это делать сродни идиотизму будет.
В идеале полная новость на сайте должна только для отображения юзеру выдергиваться и то, если ее нет в актуальном кеше движка. Тоесть хочется снизить нагрузку на БД максимально а поиск по полной новости - как раз и есть очень ненужная и замусоривающая выдачу функция.