|
|
|
| Здрасьте всем.
Оч. долго выполняется запрос. Не понятно почему :)
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 | |
|
|
|
|
|
|
|
для: Lelik
(09.12.2011 в 19:06)
| | А если надобность использовать три раза медленный оператор LIKE для поиска в color_3. Какая задача используется и как закодировано значение в нем? | |
|
|
|
|
|
|
|
для: cheops
(09.12.2011 в 19:32)
| | там хранятся цифры через запятую:
'1,3,4' или '2,5' и т. д.
|
| |
|
|
|
|
|
|
|
для: Lelik
(09.12.2011 в 19:37)
| | 1. А избавиться (нормализовать) таблицу уже не получится? Если бы числа хранились пусть даже в отдельной таблице, но не в виде строки а виде отдельных чисел - это бы позволило в разы ускорить запрос.
2. Хм... так вроде же тип столбца SMALLINT, как там строка убирается? | |
|
|
|
|
|
|
|
для: cheops
(09.12.2011 в 19:40)
| | эх напутал я тут с объяснениями и провёл кое-какие изменения. в общем дело не в самом запросе, а в том, что из результата запроса сначала создается XML, а потом уже с помощью XSLT трансформируется в HTML.
потому хотелось бы в начале сделать запрос на 30 записей, с маленькой спецификой: на страницу передается гет-параметром ид объекта, который обозначен как текущий, и вот хотелось бы отталкиваясь от ид текущего объекта выбрать предыдущие и следующие 15-30 записей в соответствии с условиями запроса. | |
|
|
|
|
|
|
|
для: Lelik
(12.12.2011 в 15:47)
| | или ещё упрощу описание требования к запросу: как имея ИД записи, можно выбрать 15 предыдущих записей перед ней :) | |
|
|
|
|
|
|
|
для: Lelik
(12.12.2011 в 16:03)
| | А.... для этого обычно сортируют id в обратном порядке ORDER BY id DESC и используют ограничение LIMIT 15. | |
|
|
|
|
|
|
|
для: cheops
(12.12.2011 в 16:10)
| | о! да! точно! спасибо! | |
|
|
|