2010-09-11 3 views
1

У меня есть в моей базе данных MySQL эти две таблицы:Оптимизация структуры MySQL запросов/баз данных

CREATE TABLE IF NOT EXISTS `articles` (
    `id` bigint(20) NOT NULL, 
    `url` varchar(255) collate utf8_bin NOT NULL, 
    `img` varchar(255) collate utf8_bin NOT NULL, 
    `name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `url_key` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `type_code` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `likes_count` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `type` (`type`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

CREATE TABLE IF NOT EXISTS `articles_types` (
    `id` int(11) NOT NULL auto_increment, 
    `code` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `url_key` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`code`), 
    KEY `type` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci; 

И я пытаюсь запустить этот запрос:

SELECT a.* FROM `articles` a INNER JOIN articles_types at ON at.`code`=a.type ORDER BY p.likes_count DESC LIMIT 1 

который возвращает 1 строку, в 1 сек..

Табличные статьи состоят примерно из 70 тысяч строк, articles_types всего около 70 строк.

Есть ли вероятность оптимизировать структуру (может быть, двигатель?) Этих таблиц или оптимизировать сам запрос, чтобы сделать его быстрее?

+0

У вас есть индексы на этих таблицах? Если да, сообщите нам, какие столбцы покрыты. –

+0

2Dustin: Как вы можете видеть выше, таблицы состоят из многих индексов, теперь я добавил новый индекс в articles.like_count, потому что результаты сортируются по этому столбцу. Но это не помогло. –

+0

2Damien: Спасибо за то, что подумал :-) Поверьте мне, если бы я действительно ответил, что бы решить мои проблемы, я бы согласился на этот ответ. –

ответ

4

Вы должны изучить вывод EXPLAIN на запросе

Это, вероятно, порядок тем, что получает вас, таким образом, создать индекс по articles.likes_count

+0

Вы абсолютно правы. Проблема здесь в том, что ORDERing - но даже после добавления индекса в articles.likes_count, он занимает 1-2 секунды. Без результатов сортировки (без ORDER BY) это очень быстро - например, 0.0004sec. –

+0

Это помогло использовать LEFT JOIN вместо INNER JOIN. Возможно, это может случиться, что появится статья с неизвестной категорией, поэтому я должен проверить это в приложении. –

Смежные вопросы