2013-07-01 3 views
-1

запрос ниже соответствует каждой модели с их связанной фотографией и позволяет мне эхо из 10 сообщений с первым изображением на фотосессии в качестве изображения по умолчанию для сообщения. в то время как он работает отлично, он кажется очень медленным. есть ли более быстрый способ достижения желаемых результатов?есть ли более быстрый способ сделать этот запрос mysql?

"SELECT * " 
. "FROM models a " 
. "INNER JOIN models_images b ON a.model_id = b.model_id " 
. "WHERE 1 AND `images_ok` = '1'"  
. "GROUP BY a.model_id ORDER BY a.id DESC "  
. "LIMIT 10" 

Благодаря

+1

Почему 'WHERE 1', используйте только' "WHERE images_ok =«1'' –

+0

не уверен что «WHERE 1» означает, я не построил этот запрос, но после его удаления страница по-прежнему загружается довольно медленно с этим запросом, не уверен, что это имеет значение. – Keezy

+0

Это даст вам все результаты, если вы используете 'WHERE 1 '. –

ответ

4

Вы можете добавить индексы model_id и images_ok полей в обеих таблицах.

Как это:

--   table name   new index name  field name 
ALTER TABLE `models` ADD INDEX `models_model_id` (`model_id`); 

Википедия О базе данных индексов:

индекс базы данных представляет собой структуру данных, которая повышает скорость операций извлечения данных на таблицу базы данных по стоимости медленнее пишет и использует больше места для хранения. Индексы могут быть созданы с использованием одного или нескольких столбцов таблицы базы данных, что обеспечивает основу для быстрого поиска случайных запросов и эффективного доступа к упорядоченным записям .

Хорошее видео, которое может помочь с пониманием индексов:

Understanding Indexes by solubletech at youtube

+0

Где находится 'models_model_id'? – Keezy

+0

Это просто имя индекса. Вы должны назвать это как-то (чтобы удалить/обновить его позже). Я использую такие имена: 'tablename_fieldname', но вы можете использовать любое имя. – Kamil

+0

, так что после этого я все еще выполняю тот же запрос? или мне нужно внести какие-либо изменения в запрос? – Keezy

0

Вы можете использовать функцию MySQL, "индекс" для этого решения. обратитесь MySQL руководство для детального объяснения по индексам

См Mysql developer tutorial

Или

См W3chools

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