2010-05-19 2 views
0

Прошу прощения, если это глупый вопрос (это маловероятно).Индексная часть таблицы mysql/innodb?

У меня есть таблица, насчитывающая 20 миллионов строк. Тем не менее, только около 300 тыс. Из этих рядов получают доступ к ним регулярно, и их можно идентифицировать в состоянии столбца, называемом «app_user = 1»

В любом случае я могу просто индексировать эти строки, и когда я вызову select, я не забудьте пройти и в этом состоянии?

+0

Похоже таблицы разделов может помочь: http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitions. html –

+0

Спасибо за подсказку! очень оценен. Если вы добавите его в качестве ответа, я бы проголосовал за него –

ответ

1

Я бы рекомендовал разделить стол на две отдельные таблицы. Но в случае, если вы не хотите этого делать, это самый эффективный способ сделать это, если вы всегда будете включать «где app_user = 1» в ваших запросах - создать первичный ключ в таблице, который включает столбец app_user как первая часть ключа. InnoDB будет использовать это как кластерный индекс, который сохранит вам несколько дополнительных дисков. Вы можете создать таблицу, как это:

создать таблицу TESTTABLE ( APP_USER TINYINT UNSIGNED по умолчанию 0, идентификатор INT UNSIGNED NOT NULL, имя VARCHAR (255) по умолчанию '', PRIMARY KEY k1 (APP_USER, идентификатор) ) ENGINE = InnoDB;

Друг написал эту статью на кластерные индексы в InnoDB некоторое время назад: http://www.joehruska.com/?p=6

1

Добавьте столбец, называемый app_user, и проиндексируйте его, затем передайте в запрос запрос WHERE app_user = 1.

Вы можете пойти дальше, чтобы разбить таблицу на эту колонку.

+0

Какая замечательная новая функция - спасибо! –

Смежные вопросы