2011-01-12 2 views
2

У меня есть музыкальный стол с> 70 000 дорожек и вы можете запросить у него плейлист. В настоящее время я выполняю запрос, в котором содержится инструкция «AND track.id IN (select id from playlist where pid = 5)». Есть ли более быстрый способ вытягивать строки, кроме подзаголовка?Самый быстрый способ запросить небольшой выбор из большой таблицы?

+2

Возможно, вы можете просто использовать «нормальную» последовательность соединений через таблицу отношений M-M, и это первый подход *, который я использовал бы, поскольку он просто подходит для «базовой» модели реляционной алгебры. При правильной настройке индексов он должен быть разбросан (обычно просто хеш-соединение или сопоставимо) для любого разумного объема данных - по крайней мере, более 70 тыс. Песен. Реляционные базы данных SQL * разработаны * для такого рода вещей. Если есть сомнения, проверьте фактические планы выполнения запросов (я не знаю, что mysql может преобразовать в этот подзапрос) и тайм-ауты выполнения. См. 'EXPLAIN'. –

+3

«маленький выбор из большого стола» кричит «индекс». Это слишком медленно? – Thilo

+0

Стол проиндексирован, это то, что вы имеете в виду? – Jason

ответ

1

Я всего лишь энтузиаст и полностью самоучка, поэтому, если я повторяю то, что уже сказано выше, пожалуйста, простите.

Однако для меня использование Sub-Select кажется дополнительной работой для Db и менее масштабируемой. Похоже, что должна быть таблица Music (tblMusic, PK_SongID), таблица плейлистов (tblPlaylist PK_PLaylistID) и справочная таблица, индексирующая их в eachother (tblPlaylist_tblMusic FK_tblPLaylist.PLaylistID, FK_tblMusic.SongID). Эта таблица, по сути, была бы связью «Множество ко многим» между плейлистами и песнями. Затем вы просто выполняете INNER JOIN между тремя таблицами и устанавливаете критерии SELECT в список воспроизведения.

Я подозреваю, что это то, что описал pst выше, но я мог ошибаться. , ,

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