[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли оптимизировать запрос?
GET
Привет.

Есть таблица tab1 и поля в ней id(int)/spec(smallint)/name(varchar(60))/vals(tinyint)
есть уникальный индекс spec+name

такой запрос (результат выборки может быть ~ от 1 до 500, поэтому проверку `vals`=3 передать php как-то не очень):

SELECT * FROM (
SELECT * FROM `tab1` WHERE `spec`=10 ORDER BY `name`
) AS `t` WHERE `vals`=3


можно конечно сделать:
SELECT * FROM `tab1` WHERE `spec`=10 AND `vals`=3 ORDER BY `name`

но тогда придется вводить еще один индекс spec+acs+name, что не хочется

vals от 0 до 3

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
T1grOK
Цитата (ABC @ 2.07.2014 - 03:50)
но тогда придется вводить еще один индекс spec+acs+name, что не хочется

Фобия многоколоночных индексов?
А сделать замеры? Не? Навскидку, сложно сказать какой вариант эффективнее(по моему второй вариант все равно окажется немного быстрей), но зная как Mysql(если он) работает с подзапросами и через какое место, то я бы, в большинстве случаев, избегал использования подзапросов.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
ABC, а если у тебя будет участвовать в выборке 2 разных таблицы, да по каждой будет (предположим) по 3 условия, то ты будешь делать "выборку от выборку" трижды по каждой таблице, да потом еще джойнить? А если 5 таблиц?
И еще и не факт, что при вложенных запросах будут работать твои "простые" индексы.

Делай многоколоночные индексы и не парься. EXPLODE тебе поможет понять, правильно ли ты сделал индекс.

PS. Чего я тут написал, какой "экплоуд"??? Имелся ввиду, естественно, EXPLAIN smile.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
GET
T1grOK
sergeiss

Спасибо, помогли решиться. smile.gif



_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.