Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ускорить выполнение запроса
 
 автор: Lelik   (09.12.2011 в 19:06)   письмо автору
 
 

Здрасьте всем.
Оч. долго выполняется запрос. Не понятно почему :)

SELECT
    `id_jms_obj`,
    `title`,
    `pict`,
    `price`,
    `color_1`,
    `color_2`,
    `color_3`,
    `spec`,
    `pos`,
    `type`
FROM
    `jms_obj`
WHERE
    hide='1'
AND
    ( `color_3` LIKE '%3%'
    OR
    `color_3` LIKE '%6%'
    OR
    `color_3` LIKE '%2%' )
AND
    `type_2`='1'
ORDER BY
    `pos`
ASC

сама таблица выглядит так

CREATE TABLE `jms_obj` (
    `id_jms_obj` INT UNSIGNED AUTO_INCREMENT NOT NULL,
    `title` TEXT NOT NULL,
    `text` TEXT NOT NULL,
    `keywords` TEXT NOT NULL,
    `description` TEXT NOT NULL,
    `pict` CHAR(100) NOT NULL DEFAULT '',
    `price` CHAR(100) NOT NULL DEFAULT '',
    `color_1` SMALLINT UNSIGNED NOT NULL,
    `color_2` SMALLINT UNSIGNED NOT NULL,
    `color_3` SMALLINT UNSIGNED NOT NULL,
    `spec` SMALLINT UNSIGNED NOT NULL,
    `pos` SMALLINT UNSIGNED NOT NULL,
    `hide` SMALLINT UNSIGNED NOT NULL,
    `type` SMALLINT UNSIGNED NOT NULL,
    `type_2` SMALLINT UNSIGNED NOT NULL,
    PRIMARY KEY(`id_jms_obj`)
) Type = MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

количество результатов при выводе из БД в районе 500

  Ответить  
 
 автор: cheops   (09.12.2011 в 19:32)   письмо автору
 
   для: Lelik   (09.12.2011 в 19:06)
 

А если надобность использовать три раза медленный оператор LIKE для поиска в color_3. Какая задача используется и как закодировано значение в нем?

  Ответить  
 
 автор: Lelik   (09.12.2011 в 19:37)   письмо автору
 
   для: cheops   (09.12.2011 в 19:32)
 

там хранятся цифры через запятую:

'1,3,4' или '2,5' и т. д.

  Ответить  
 
 автор: cheops   (09.12.2011 в 19:40)   письмо автору
 
   для: Lelik   (09.12.2011 в 19:37)
 

1. А избавиться (нормализовать) таблицу уже не получится? Если бы числа хранились пусть даже в отдельной таблице, но не в виде строки а виде отдельных чисел - это бы позволило в разы ускорить запрос.
2. Хм... так вроде же тип столбца SMALLINT, как там строка убирается?

  Ответить  
 
 автор: Lelik   (12.12.2011 в 15:47)   письмо автору
 
   для: cheops   (09.12.2011 в 19:40)
 

эх напутал я тут с объяснениями и провёл кое-какие изменения. в общем дело не в самом запросе, а в том, что из результата запроса сначала создается XML, а потом уже с помощью XSLT трансформируется в HTML.

потому хотелось бы в начале сделать запрос на 30 записей, с маленькой спецификой: на страницу передается гет-параметром ид объекта, который обозначен как текущий, и вот хотелось бы отталкиваясь от ид текущего объекта выбрать предыдущие и следующие 15-30 записей в соответствии с условиями запроса.

  Ответить  
 
 автор: Lelik   (12.12.2011 в 16:03)   письмо автору
 
   для: Lelik   (12.12.2011 в 15:47)
 

или ещё упрощу описание требования к запросу: как имея ИД записи, можно выбрать 15 предыдущих записей перед ней :)

  Ответить  
 
 автор: cheops   (12.12.2011 в 16:10)   письмо автору
 
   для: Lelik   (12.12.2011 в 16:03)
 

А.... для этого обычно сортируют id в обратном порядке ORDER BY id DESC и используют ограничение LIMIT 15.

  Ответить  
 
 автор: Lelik   (12.12.2011 в 16:11)   письмо автору
 
   для: cheops   (12.12.2011 в 16:10)
 

о! да! точно! спасибо!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования