Индексная часть таблицы mysql / innodb? - PullRequest
0 голосов
/ 19 мая 2010

Прошу прощения, если это глупый вопрос (потому что это звучит маловероятно).

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

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

Ответы [ 2 ]

1 голос
/ 26 мая 2010

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

создать таблицу testTable ( app_user tinyint НЕ ПОДПИСАНО по умолчанию 0, id int НЕ ПОДПИСАНО НЕ НУЛЬ, имя varchar (255) по умолчанию '', ПЕРВИЧНЫЙ КЛЮЧ k1 (app_user, id) ) ДВИГАТЕЛЬ = InnoDB;

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

1 голос
/ 19 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...