Joker Board 3.0

Можете подсказать как сделать расстояние небольшое между категориями. вернее подкатигориями
 
короче, при 30 тыс объявлениях, в доске есть такой вот примерно запрос :
SELECT STRAIGHT_JOIN jb_board.id AS board_id, jb_board.id_category, jb_board.title, jb_board.city, jb_board.city_id,
DATE_FORMAT(jb_board.date_add,'%d.%m.%Y %H:%i:%s') AS dateAdd, jb_board.text,
DATE_FORMAT(jb_board.date_add,'%d.%m.%Y') AS dateAdd2,
DATE_FORMAT(jb_board.date_add,'%H:%i:%s') AS dateAdd3,
jb_board.checkbox_top,
jb_board.checkbox_select,jb_board.type, jb_board_cat.id, jb_board_cat.name_cat, jb_photo.photo_name,
jb_city.city_name, jb_board.price

FROM jb_board
RIGHT JOIN jb_board_cat ON jb_board.id_category = jb_board_cat.id
LEFT JOIN jb_city ON jb_board.city_id = jb_city.id
LEFT JOIN jb_photo ON jb_board.id = jb_photo.id_message
WHERE old_mess = 'old'
GROUP by jb_board.id
ORDER BY jb_board.date_add DESC LIMIT 0, 50;


оно начинает выполнятся по 5 сек
 
короче, при 30 тыс объявлениях, в доске есть такой вот примерно запрос :
SELECT STRAIGHT_JOIN jb_board.id AS board_id, jb_board.id_category, jb_board.title, jb_board.city, jb_board.city_id,
Попробуй поменять стрейч на иннер. И проверь все индексы. Либо отсутствуют индексы, либо эта особенность стрейча, который грузит таблицы по очереди перед объединением. Честно говоря не связывался с ним. Мои предположения. Другого быть тут не может. Еще как вариант чтото с датой намудрено, попробуй вывести дату единожды., но всё же не вижу ID от jb_photo
 
сделай эксперимент, ORDER BY напрмиер по ID, не по дате. Меня лично дата смущает. Никогда не связывался с тремя запросами подряд одного и того же, поэтому могу глубоко заблуждаться.
 
Попробуй поменять стрейч на иннер. И проверь все индексы. Либо отсутствуют индексы, либо эта особенность стрейча, который грузит таблицы по очереди перед объединением. Честно говоря не связывался с ним. Мои предположения. Другого быть тут не может. Еще как вариант чтото с датой намудрено, попробуй вывести дату единожды., но всё же не вижу ID от jb_photo

Стрейч это я уже нечаянно дописал, это я уже экспериментировал.
Индексы вроде бы все есть.

Тормоза из-за строк GROUP by jb_board.id
ORDER BY jb_board.date_add DESC LIMIT 0, 50;

тут хоть все джоины если убрать,отсавить что-то вроде:
SELECT STRAIGHT_JOIN *
FROM jb_board
WHERE old_mess = 'old'
GROUP by jb_board.id
ORDER BY jb_board.date_add DESC LIMIT 0, 50;
все равно запрос конечно не 5 сек, но пол секунды выполняется, а без сортировок и группировок около 0.005 сек
 
Это сложный запрос и судя по всему GROUP и ORDER начинают себя так вести изза неиндексируемого jb_photo, они просто начинают сортировать эту кашу. Вообще запрос похож на запрос поиска по объявлениям, выдачи списка категорий. Не пойму чем старый не устроил. Или сортировку по дате так делаете? в стандартном запросе поиска GROUP by jb_board.id ORDER by board_id DESC LIMIT ....
 
сделай эксперимент, ORDER BY напрмиер по ID, не по дате. Меня лично дата смущает. Никогда не связывался с тремя запросами подряд одного и того же, поэтому могу глубоко заблуждаться.

Сделал такой запрос:
SELECT jb_board.id AS board_id, jb_board.id_category, jb_board.title, jb_board.city, jb_board.city_id, DATE_FORMAT( jb_board.date_add, '%d.%m.%Y %H:%i:%s' ) AS dateAdd, jb_board.text, jb_board.checkbox_top, jb_board.checkbox_select, jb_board.type, jb_board_cat.id, jb_board_cat.name_cat, jb_photo.photo_name, jb_city.city_name, jb_board.price
FROM jb_board
RIGHT JOIN jb_board_cat ON jb_board.id_category = jb_board_cat.id
LEFT JOIN jb_city ON jb_board.city_id = jb_city.id
LEFT JOIN jb_photo ON jb_board.id = jb_photo.id_message
WHERE old_mess = 'old'
GROUP BY jb_board.id
ORDER BY jb_board.id DESC
LIMIT 0 , 50;

получается (50 всего, запрос занял 6.3309 сек.)
 
ок. а теперь убери jp_photo вообще. всё что связано с фото. Обычно тормозные запросы только изза отсутствия ID в запросе ну и в базе

если со старым поиском не было проблем, с jb_photo, то всё там проиндексировано. еще смущает строчка WHERE old_mess='old'. замени на WHERE jb_board.old_mess='old'


и в ORDER by board_id.id сделай ORDER by board_id


проверил у себя, так у меня с ORDER by board_id.id вообще идет сначала тормоз секунды 3, а потом вообще без результатов.

Добавлено kabasik: есть кнопка редактировать
 
если со старым поиском не было проблем, с jb_photo, то всё там проиндексировано. еще смущает строчка WHERE old_mess='old'. замени на WHERE jb_board.old_mess='old
и в ORDER by board_id.id сделай ORDER by board_id
проверил у себя, так у меня с ORDER by board_id.id вообще идет сначала тормоз секунды 3, а потом вообще без результатов.

В общем вот такой запрос как я понял должен получится:
SELECT STRAIGHT_JOIN jb_board.id AS board_id, jb_board.id_category, jb_board.title, jb_board.city, jb_board.city_id, DATE_FORMAT( jb_board.date_add, '%d.%m.%Y %H:%i:%s' ) AS dateAdd, jb_board.text, jb_board.checkbox_top, jb_board.checkbox_select, jb_board.type, jb_board_cat.id, jb_board_cat.name_cat, jb_city.city_name, jb_board.price
FROM jb_board
RIGHT JOIN jb_board_cat ON jb_board.id_category = jb_board_cat.id
LEFT JOIN jb_city ON jb_board.city_id = jb_city.id
WHERE jb_board.old_mess = 'old'
GROUP BY board_id
ORDER BY board_id DESC
LIMIT 0 , 50;

Быстрее конечно спасибо, но все равно , запрос занял 1.7075 сек. т.е. почти 2 сек
 
да. медленно. возможно проц слабый на локалхосте. У меня селерон 2,3 ггц на винде делает гораздо медленнее дешевого хостинга, возможно по времени будет примерно также с 30 тыс объяв. У меня на демо лишь 540 объявлений. проверить не могу... нада базу качать с хоста.
 
Назад
Сверху