Задавайте вопросы, мы ответим
Вы не зашли.
Помогите пожалуйста.
У меня запрос выполняется очень долго, если убрать JOIN, или ORDER, то все просто летает.
SELECT DISTINCT onf.*, seo.*,
FLOOR(TO_DAYS(NOW())-TO_DAYS(FROM_UNIXTIME(dateadded))) as putdate
FROM on_files AS onf
LEFT JOIN seotext AS seo ON onf.fileid = seo.item_id AND seo.class = 'app\\models\\OnFiles'
WHERE onf.status = '1'
ORDER BY onf.timesplayed DESC LIMIT 0 , 180
Сама база такая :
--
-- Структура таблицы `on_files`
--
CREATE TABLE `on_files` (
`fileid` int(11) NOT NULL,
`file` text NOT NULL,
`icon` text NOT NULL,
`video` text NOT NULL,
`filelocation` enum('1','2','3') NOT NULL DEFAULT '1',
`iconlocation` enum('1','2') NOT NULL DEFAULT '1',
`customcode` text NOT NULL,
`title` text NOT NULL,
`title_m` text NOT NULL,
`title_m_en` varchar(255) NOT NULL,
`title_en` text NOT NULL,
`description` text NOT NULL,
`description_m` text NOT NULL,
`description_m_en` text NOT NULL,
`description_en` text NOT NULL,
`keywords` text NOT NULL,
`keywords_en` text NOT NULL,
`width` int(11) NOT NULL DEFAULT '0',
`height` int(11) NOT NULL DEFAULT '0',
`timesplayed` int(11) NOT NULL DEFAULT '0',
`status` enum('0','1','2','3') NOT NULL DEFAULT '1',
`filetype` varchar(55) NOT NULL DEFAULT '',
`dateadded` int(10) NOT NULL DEFAULT '0',
`rating` int(100) NOT NULL DEFAULT '0',
`rating_n` int(11) NOT NULL DEFAULT '0',
`added_by` int(11) NOT NULL DEFAULT '0',
`mobile` enum('0','1','2') NOT NULL DEFAULT '0',
`rightblock` enum('0','1') NOT NULL DEFAULT '1',
`score_type` enum('1','2') NOT NULL DEFAULT '1',
`youtube_urllink` varchar(255) NOT NULL,
`youtube_userid` int(11) NOT NULL,
`youtube_approve` int(2) NOT NULL DEFAULT '0' COMMENT 'разрешен, или нет',
`slug` varchar(128) NOT NULL,
`category` int(11) NOT NULL,
`totalvotes` int(11) NOT NULL,
`totalvotepoints` int(11) NOT NULL,
`adult` int(11) NOT NULL,
`scores` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- --------------------------------------------------------
--
-- Структура таблицы `seotext`
--
CREATE TABLE `seotext` (
`seotext_id` int(11) NOT NULL,
`class` varchar(128) NOT NULL,
`item_id` int(11) NOT NULL,
`h1_ru` varchar(255) DEFAULT NULL,
`h1_en` varchar(255) DEFAULT NULL,
`title_ru` varchar(255) DEFAULT NULL,
`title_en` varchar(255) DEFAULT NULL,
`keywords` varchar(128) DEFAULT NULL,
`description_ru` varchar(255) DEFAULT NULL,
`description_en` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
--
-- Индексы сохранённых таблиц
--
--
-- Индексы таблицы `on_files`
--
ALTER TABLE `on_files`
ADD PRIMARY KEY (`fileid`),
ADD KEY `dateadded` (`dateadded`),
ADD KEY `status` (`status`),
ADD KEY `dateadded_2` (`dateadded`),
ADD KEY `timesplayed` (`timesplayed`),
ADD KEY `status_2` (`status`),
ADD KEY `fileid` (`fileid`);
--
-- Индексы таблицы `seotext`
--
ALTER TABLE `seotext`
ADD PRIMARY KEY (`seotext_id`),
ADD UNIQUE KEY `model_item` (`class`,`item_id`),
ADD KEY `item_id` (`item_id`);
--
-- AUTO_INCREMENT для сохранённых таблиц
--
Неактивен
В общем убрал DISTINCT, и все заработало вроде нормально, но почему так происходит ?
Отредактированно zaqwsx_ (30.01.2018 12:44:25)
Неактивен
DISTINCT - в определенном смысле аналог group by.
Затратнее сначала выбрать 100 неповторяющихся элементов, нежели просто 100 элементов.
Неактивен
понятно, спасибо
Неактивен