2012-01-24 3 views
0

У меня есть одна таблица, в которой есть 25 лакх записей. Столбцы в таблицах show - id, showid, artist_id, cityid, созданы.Оптимизация подзапроса mysql для нескольких столбцов

Если такое же шоу происходит в течение 4 дней. Затем в системных данных будет выглядеть так:

id, showid, artist_id, cityid, созданный для каждого шоу, будет оставаться таким же.

1 245 1 3 2011-12-30 15:00:00

2 245 1 3 2011-12-30 13:00:00

3 245 1 3 2011-12-30 19 : 00: 00

SELECT UT.user_id,UT.type_id, UT.type ,UT.track_time, 
(SELECT showid FROM shows WHERE FIND_IN_SET(UT.type_id,artist_id) ORDER BY created DESC LIMIT 1) as mainshowid, 
(SELECT cityid FROM shows WHERE FIND_IN_SET(UT.type_id,artist_id) ORDER BY created DESC LIMIT 1) as maincityid 
FROM user_details as UT WHERE UT.type='artist' ORDER BY UT.track_time desc limit 20; 

Запрос дает выход желание Но как я могу получить несколько столбцов в одном запросе SUB или любым другим способом.

ответ

0

Вы можете:

SELECT 
    UT.user_id, 
    UT.type_id, 
    UT.type, 
    UT.track_time, 
    s.showid AS mainshowid, 
    s.cityid AS maincityid 
FROM 
     user_details AS UT 
    JOIN 
     shows AS s 
    ON s.showid = 
     (SELECT showid 
     FROM shows 
     WHERE FIND_IN_SET(UT.type_id, artist_id) 
     ORDER BY created DESC 
     LIMIT 1 
     ) 
WHERE UT.type='artist' 
ORDER BY UT.track_time DESC 
LIMIT 20 ; 
+0

Благодаря это работает. Но можем ли мы его оптимизировать. SELECT showid FROM показывает WHERE FIND_IN_SET (UT.type_id, artist_id) ORDER BY created DESC LIMIT 1 В таблице показывает, что у меня 15 миллионов строк. Потому что, если я запустил его после удаления LIMIT 20, потребуется много времени. –

+0

. Использование 'FIND_IN_SET()' предполагает, что у вас есть столбец, разделенный запятыми. Это не хорошо. Читайте здесь почему: [Является ли хранение списка с запятыми в столбце базы данных действительно так плохо?] (Http://stackoverflow.com/questions/3653462/is-storing-a-comma-separated-list-in-a-database -column-очень-то-плохо). –

+0

Если вы хотите производительность, то вы должны нормализовать таблицы. –

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