2013-04-21 2 views
1

У меня есть запросДлинный запрос MySQL

SELECT * 
    FROM tbl_auction_listing 
    JOIN tbl_user ON tbl_auction_listing.user_id = tbl_user.user_id 
    JOIN tbl_subject ON tbl_auction_listing.subject_id = tbl_subject.subject_id 
    JOIN tbl_medium ON tbl_auction_listing.medium_id = tbl_medium.medium_id 
    JOIN tbl_style ON tbl_auction_listing.style_id = tbl_style.style_id 
WHERE tbl_auction_listing.item_number = '2736503389’ 

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

Индексы

tbl_auction_listing 0 PRIMARY 1 auction_listing_id A 18739    BTREE  
tbl_auction_listing 1 Listing - subject_id 1 subject_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - medium_id 1 medium_id A 32   YES BTREE  
tbl_auction_listing 1 Listing - style_id 1 style_id A 38   YES BTREE  
tbl_auction_listing 1 Listing - colour_id 1 colour_id A 30   YES BTREE  
tbl_auction_listing 1 Listing - user_id 1 user_id A 1441    BTREE  
tbl_auction_listing 1 Listing - price_id 1 price_id A 20   YES BTREE  
tbl_auction_listing 1 Listing - status 1 status A 8   YES BTREE  
+0

Каковы ваши индексы и каков план объяснений? Вам действительно нужно выбрать _everything_ из всех этих таблиц? – Ben

+0

Кроме того, что такое длинная часть опроса? Выполняете ли вы этот запрос в бесконечном цикле или что? Это наверняка сбой любого сервера. –

+0

Да Мне нужно выбрать данные из всех таблиц. Не вся информация, кроме 3 из 5 таблиц, имеет 2 или 3 столбца. – puks1978

ответ

2

Вы можете:
1. Увеличение времени запроса HTTP по умолчанию из вашего веб-сервера
2. Построение индекса на tbl_auction_listing.item_number
3. Кэш некоторые из этих таблиц которые менее подвержены изменениям.
4. Увеличьте тайм-аут запроса sql на сервере приложений и db
5. Денормализовать базу данных

+0

+1 для пункта 2. –

0

Нет, вам не лучше разбить этот запрос на несколько запросов.

Было бы лучше добавить индексы в базу данных, чтобы ускорить запрос. Каждая из субтитров должна иметь индекс на своем первичном ключе. Например, tbl_style должен иметь индекс на tbl_style(style_id) и так далее.

Ваши индексы «в неправильном направлении». Они должны находиться в самих справочных таблицах, а не (или не только) на основной таблице.

+0

Привет, да, они тоже. – puks1978

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