Я пытаюсь выяснить, наиболее эффективный способ извлечения значений из базы данных, которая имеет структуру, подобную этой:MySQL индексации столбцов против присоединения таблиц
тестовая таблица:
int id (primary, auto increment)
varchar(50) stuff,
varchar(50) important_stuff;
где нужно сделать запрос как
select * from test where important_stuff like 'prefix%';
размер всей таблицы составляет примерно 10 миллионов строк, однако есть только около 500-1000 различных значений для important_stuff. Мое текущее решение - индексирование important_stuff
, однако производительность не является удовлетворительной. Будет ли лучше создать отдельную таблицу, которая будет соответствовать отчетливое important_stuff
к определенному идентификатору, который будет храниться в таблице «тест», а затем сделать
(select id from stuff_lookup where important_stuff like 'prefix%') a join select * from test b where b.stuff_id=a.id
или это:
select * from test where stuff_id exists in(select id from stuff_lookup where important_stuff like 'prefix%')
Каков наилучший способ оптимизации таких вещей?
Какие dbms вы используете? mysql <> sqlserver –
MySQL с InnoDB – Dimi
Это похоже на ситуацию, когда некоторые руки на тестировании будут вам полезны. Попробуйте создать вторую таблицу, а затем попробуйте использовать два тестовых примера использования и посмотрите, какая из них работает лучше. Я не могу говорить ни для кого, но у меня нет 10-миллионной тестовой базы данных, лежащей рядом с тестом;) – mituw16