Привет.
Есть таблица 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
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата (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
2.07.2014 - 11:37
ABC, а если у тебя будет участвовать в выборке 2 разных таблицы, да по каждой будет (предположим) по 3 условия, то ты будешь делать "выборку от выборку" трижды по каждой таблице, да потом еще джойнить? А если 5 таблиц?
И еще и не факт, что при вложенных запросах будут работать твои "простые" индексы.
Делай многоколоночные индексы и не парься.
EXPLODE тебе поможет понять, правильно ли ты сделал индекс.
PS. Чего я тут написал, какой "экплоуд"??? Имелся ввиду, естественно, EXPLAIN
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
T1grOKsergeissСпасибо, помогли решиться.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.