Очевидно, что выбор текстового поля среди 1 миллиона записей будет медленным и не рекомендуется. Вот два возможных решения.Производительность MySQL - 1 миллион записей - выберите Int перед текстовым полем
Разбивайте базу данных, предоставляя каждому пользователю свою собственную базу данных или таблицу и, следовательно, резко уменьшая общее количество записей в каждой таблице.
Выполните запрос SQL SELECT для соответствия INT, где INT - это идентификатор пользователя, а затем соответствует текстовому полю.
Вариант 1 обеспечит очевидное увеличение производительности. Но может ли вариант номер 2 получить выигрыш? В заявлении, если мы сначала сопоставим INT, это приведет к сокращению результата до только совпадающих записей, а затем выполнит поиск в текстовом поле. Например ..
$user_id = 1001;
$domain_name = "mydomain.com";
$query = $database->prepare("SELECT * FROM domains_table WHERE user_id = $user_id && domain_name = $domain_name");
Где переключая положение user_id и domain_name в приведенном выше запросе уничтожит производительность. Является ли совпадение с user_id первым преимуществом здесь?
Что говорит 'EXPLAIN' о ваших вариантах запроса? Вы сравнили их? У вас есть Фактическое использование поля 'TEXT' для имени домена (почему), или это' VARCHAR'? Индексируется ли это поле? – DCoder
@DCoder Я использую CHAR (36) вместо VARCHAR, чтобы получить выигрыш в производительности, поскольку это будет быстрее. Согласен? –
Почему, по вашему мнению, 1 миллион записей будет медленным и не рекомендуется? 1 миллион - очень маленький - убедитесь, что у вас индексированы ваши столбцы. Первый вариант звучит как кошмар и, возможно, даже будет проигрышем. – Siyual