Запрос примитивный — вытащить посты по указанному тегу
SELECT SQL_NO_CACHE posts.id, posts.text, posts.anno, posts.date
FROM `posts`
INNER JOIN `posts_xref_tags` ON posts_xref_tags.post_id = posts.id
WHERE posts_xref_tags.tag_id = 1
ORDER BY posts.date DESC
LIMIT 0,10
в posts primary на id, индекс на date
в posts_xref_tags составной primary на tag_id + post_id и индекс на tag_id
Постов в базе 30000, перекрестных связей 40000… постов имеющих связь с tag_id = 1 4,281
запрос выполняется за 0.2с
explain:
id |
select_type |
table |
type |
possible_keys |
key |
key_len |
ref |
rows |
Extra |
1 |
SIMPLE |
posts_xref_tags |
ref |
PRIMARY,tag_id |
tag_id |
4 |
const |
4244 |
Using temporary; Using filesort |
1 |
SIMPLE |
posts |
eq_ref |
PRIMARY |
PRIMARY |
4 |
db_site. posts_xref_tags. post_id |
1 |
|
UPD: Нашел решение!!!
SELECT SQL_NO_CACHE posts.id, posts.text, posts.anno, posts.create_date
FROM `az_posts`
WHERE id
IN (
SELECT `post_id`
FROM `posts_xref_tags`
WHERE tag_id =1
)
ORDER BY posts.create_date DESC
LIMIT 0, 10
выполняется за 0.002с
всем спасибо!