2015-07-11 4 views
1

Я относительно новичок в области данных; так жаль, если это 101 знание, которое я еще не всасывал. Я искал Google, но не нашел удовлетворительного ответа.Оптимизация производительности поиска, MySQL

Я пишу программу, которая просматривает файлы ~ 20mio и помещает имена своих файлов в одну таблицу (у меня есть сильные предпочтения держать ее в одной таблице для будущего использования). Каждый file_name содержит BIGINT id (среди других символов Ascii). Для каждого BIGINT id имеется только около 20 file_name. Мой вопрос сейчас: Могу ли я использовать эту структуру имен для лучшей производительности поиска?

Моя структура таблицы до сих пор:

CREATE TABLE IF NOT EXISTS files 
     (file_name VARCHAR(40) CHARACTER SET ascii NOT NULL PRIMARY KEY," 
     id BIGINT UNSIGNED, 
     ...) 

И мои заявления подстановки просто:

WHERE file_name = '...' 

ли, к примеру, лучше индексировать id, а затем посмотреть file_name и id?

Спасибо за кучу заранее!

+1

Чтобы судить о «результатах поиска», давайте посмотрим инструкции 'SELECT'. –

+0

Что такое 'id'? Как он вычисляется? Вам это действительно нужно? –

ответ

2

Я понимаю, что у вас может быть 20 разных имен файлов для каждого ID, поэтому идентификатор не уникален. Тогда вы не можете использовать ID для Первичного ключа. Единственный вариант - использовать имя_файла в качестве основного ключа, если вы знаете, что имя_файла уникально. Это даст вам максимальную производительность, если вы ищете конкретное имя_файла. Если вам также нужно искать все файлы с определенным идентификатором, вы должны создать индекс не уникального в поле ID.

+1

Именование идентификатора столбца, а затем не хранение ПК в нем, будет очень запутанным для тех, кто понимает таблицу. – luksch

1

Обычный дизайн стола будет означать, что id является ПЕРВИЧНЫМ КЛЮЧОМ. Если вы хотите также запросить имя файла, индекс в этом столбце может быть правильным выбором.

+0

Прохладный. Большое спасибо за ваш быстрый ответ. 'file_name' - это единственное, что важно для меня. 'id' - это просто то, что я думаю об использовании; следовательно, вопрос и ваш ответ. Быстрый вопрос: насколько большой удар по производительности я возьму, если я индексирую 'имя_файла' поверх PK' id'? – dotwin

+0

~ 20mio rows делают индекс, безусловно, стоит использовать, особенно если индекс уникален. Таким образом, вы, скорее всего, быстрее найдете свои файловые величины с индексом по сравнению с без. Вы платите с размером индекса. Все становится сложным и медленным, когда индекс больше не вписывается в память базы данных. убедитесь, что у db достаточно ОЗУ. – luksch

+0

@luksch - если таблица InnoDB, то «PRIMARY KEY» кластеризуется с данными, поэтому не занимает дополнительного места. _secondary_ 'INDEX (id)' будет стоить кучу места, возможно, больше, чем сама таблица. –

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