2015-06-23 7 views
1

Есть ли способ вернуть уникальные значения на основе запроса в MySQL без повторного выполнения одного и того же запроса для каждого столбца?Получить отличительные значения для каждого столбца без повторного выполнения одного и того же запроса

У меня есть несколько сложный запрос, который включает в себя несколько объединений и может возвращать 50 000 строк. Моя цель - получить все уникальные значения каждого столбца, как если бы я сделал:

SELECT DISTINCT column_a FROM ... 

Для каждой колонки. Есть ли способ сделать это без многократного выполнения запроса?

+0

Mysql внутренне кэширует запросы, поэтому последующие запросы будут выполняться быстрее. Но я думаю, что вам нужно кэширование на другом уровне? Memcache? Тогда вы рискуете запуском устаревших данных, если вы снова не выполняете свой полный запрос –

+0

Хороший вопрос о кешировании. как вы думаете, будет ли быстрее или медленнее строить временную таблицу на основе исходных результатов? – billynoah

+0

все зависит от ваших данных, ваших индексов, объема выделенного вами фрагмента процесса и количества других запросов, выполняемых между вашими запросами –

ответ

0

вы можете использовать подзапрос столбца. пример

mysql> select (select name from city order by rand() limit 1) "randdom value1", (select name from city order by rand() limit 1) "random value2", name "actual value" from city limit 10; 

+--------------------+-------------------+----------------+ 
| randdom value1  | random value2  | actual value | 
+--------------------+-------------------+----------------+ 
| Valle de Santiago | Shulin   | Kabul   | 
| Ibarra    | Xiangfan   | Qandahar  | 
| Kingston upon Hull | Bataisk   | Herat   | 
| Huancayo   | Fort Worth  | Mazar-e-Sharif | 
| Longyan   | Linköping   | Amsterdam  | 
| Cheju    | Rubtsovsk   | Rotterdam  | 
| Aligarh   | Bergisch Gladbach | Haag   | 
| Najran    | Pultava [Poltava] | Utrecht  | 
| Shuangyashan  | Cedar Rapids  | Eindhoven  | 
| Buffalo   | Abilene   | Tilburg  | 
+--------------------+-------------------+----------------+ 
10 rows in set (0.03 sec)