Я новичок в использовании mysql, и я пытаюсь изучить лучшие практики. Я установил аналогичную структуру, как показано ниже.
(основная таблица, содержащая все уникальные записи) TABLE = 'main_content'
+------------+---------------+------------------------------+-----------+
| content_id | (deleted) | title | member_id |
+------------+---------------+------------------------------+-----------+
| 6 | | This is a very spe?cal t|_st | 1 |
+------------+---------------+------------------------------+-----------+
(Показывает общую сумму каждой сложности и идентификатор соединения --> фактическое имя) TABLE = 'difficulty'
+---------------+-------------------+------------------+
| difficulty_id | difficulty_name | difficulty_total |
+---------------+-------------------+------------------+
| 1 | Absolute Beginner | 1 |
| 2 | Beginner | 1 |
| 3 | Intermediate | 0 |
| 4 | Advanced | 0 |
| 5 | Expert | 0 |
+---------------+-------------------+------------------+
(Эта таблица гарантирует, что для каждой записи можно вставить несколько значений. Например, эта конкретная запись указывает, что с отправкой связаны 2 трудности) TABLE = 'lookup_difficulty'
+------------+---------------+
| content_id | difficulty_id |
+------------+---------------+
| 6 | 1 |
| 6 | 2 |
+------------+---------------+
Я объединяю все это в читаемый запрос:
SELECT group_concat(difficulty.difficulty_name) as difficulty, member.member_name
FROM main_content
INNER JOIN difficulty ON difficulty.difficulty_id
IN (SELECT difficulty_id FROM main_content, lookup_difficulty WHERE lookup_difficulty.content_id = main_content.content_id )
INNER JOIN member ON member.member_id = main_content.member_id
Вышеизложенное работает нормально, но мне интересно, является ли это хорошей практикой. Я практически следовал структуре, изложенной в примере нормализации базы данных из Википедии.
Когда я запускаю приведенный выше запрос, используя EXPLAIN
, он говорит: «Используя где; Использование буфера соединения, а также то, что я использую 2 ЗАВИСИМЫХ ПОДЗАПРОСА (s). Я не вижу способа НЕ использовать подзапросы для достижения того же эффекта, но опять же, я нуб, так что, возможно, есть лучший способ....
IN
работает медленно? Я могу добиться того же результата, если заменюIN
на:= ANY
. Я не знаю, что быстрее, иEXPLAIN
не дает большого понимания. 26.07.2011_id
являются индексами, но я не уверен, что кластерный индекс для таблицlook_up
будет лучше. 27.07.2011