Что может быть лучше, чем объединение трех таблиц? - PullRequest
0 голосов
/ 28 января 2011

Мне нужно где-то присоединиться к 3 таблицам в моем проекте.
Вот примеры таблиц и столбцов:

Table-1 : posts 
Columns1: id,owner,title,post,keywords

Table-2 : sites
Columns2: id,name,url

Table-3 : views
Columns3: id,post,view

Когда я присоединяюсь ко всем этим таблицам, возникает такой небольшой запрос:

SELECT title,post,keywords,name,url,view
FROM posts 
LEFT JOIN sites ON sites.id=posts.owner 
LEFT JOIN views ON views.post = post.id 
WHERE posts.date BETWEEN '2010-10-10 00:00:00' AND '2010-11-11 00:00:00' 
ORDER BY views.view DESC 
LIMIT 0,10

Это единственный способ или я могу сделать что-то еще, чтобы улучшить производительность?

Это ОБЪЯСНЕНИЕ моего текущего запроса. Выше один только пример. MysqlFront EXPLAIN Result

Ответы [ 4 ]

2 голосов
/ 28 января 2011

Это не большой запрос для любого уровня воображения.

Насколько это медленно?

Может быть, если представления не содержат больше информации, чем то, что вы показали, у вас должно быть просто количество просмотров в поле сообщений. Не нужно, чтобы это была отдельная таблица, если вы на самом деле не храните некоторую информацию о самих представлениях, например строки пользовательского агента или время.

2 голосов
/ 28 января 2011

Это не особенно "огромный" запрос.Вы запустили анализатор запросов и проверили, где находится медленная точка, а затем проверили свои индексы?

Re: Analyzer - Microsoft продолжает его перемещать, но в 2008 Management Studio есть несколько вариантов отображения плана выполнения.Как только вы видите план выполнения, вы можете увидеть, где проблемы.Ищите одно действие, отнимающее 80 +% вашего времени, и сосредоточьтесь на этом.Такие вещи, как сканирование таблиц, являются показателем того, что вы можете ускорить его, настроив индексы.(У индексов есть и недостатки, но об этом позже).

0 голосов
/ 28 января 2011

Если ваши отношения гарантированы, другими словами ненулевые внешние ключи, тогда запрос будет работать лучше, если он использует внутренние объединения вместо левых.Хотя этот запрос не кажется большим или сложным, чтобы серьезно страдать от проблем с производительностью.

0 голосов
/ 28 января 2011

Если ваша таблица POSTS особенно велика (> 100 тыс. Строк?), То одну вещь, которую вы могли бы сделать, это загрузить отфильтрованные по времени записи во временную таблицу и присоединиться к этой временной таблице.

...