У меня есть таблица с именем data
в базе данных mysql. Стол довольно большой и имеет около 500 тыс. Записей, и это число вырастет до 1 млн. Каждая запись состоит из 50 столбцов, и большинство из них содержат varchars.Создание индекса в таблице mysql
Таблица data
используется очень часто. Фактически, большинство запросов обращаются к этой таблице. Данные считываются и записываются на него примерно 50 пользователями одновременно. Система очень загружена пользователями, которые загружают и проверяют свои данные, поэтому ее можно остановить максимум на час или два.
После некоторых исследований. Я узнал, что почти все запросы на выбор, у которых есть предложение where, используют одно из четырех полей в таблице. Это поля: isActive, country, state, city - все в формате int. , Где может быть либо
where isActive = {0|1}
или
where isActive = {0|1} and {country|state|city} = {someIntValue}
или
where {country|state|city} = {someIntValue}
И последняя вещь, что таблица не имеет индексов для первичного идентификатора, кроме одного.
После того, как стол вырос до текущих размеров, я столкнулся с некоторыми проблемами производительности.
Итак, на мой вопрос, если я создаю индексы на столбцах isActive, страна, штат и город увеличится производительность?
UPD: Я только что создал индекс на одном из этих полей и WOW! запросы выполняются немедленно. Спасибо вам, ребята.
Да, это будет - просто попробуйте - вы не потеряете никаких данных. Вы можете использовать tinyint, когда используете значения 0 или 1. – bestprogrammerintheworld
- это комплексный единый индекс для всех этих полей или отдельных для каждого поля? как я понял, создание индекса приведет к отдыху в таблице, и я не хочу рисковать. – kbeat
Настольный отдых? Создание или удаление индекса не повлияет ни на какие данные, ни на таблицу. – PeteGO