манипулировать 15 миллионов записей в MySQL с помощью PHP? - PullRequest
5 голосов
/ 04 января 2011

Я получил пользовательскую таблицу, содержащую более 15 миллионов записей, и при выполнении функции регистрации я хочу проверить, существует ли уже имя пользователя.Я выполнил индексирование для столбца имени пользователя, и когда я запускаю запрос "select count(uid) from users where username='webdev'",. Хммм, он продолжает загружать пустой экран, наконец, зависает. Я делаю это на своем локальном хосте с php 5 и mysql 5. Так что предложите мне некоторую техникучтобы справиться с этой ситуацией.

Это mongodb - хорошая альтернатива для обработки этого процесса на нашей локальной машине?

Спасибо, Nithish.

Ответы [ 4 ]

6 голосов
/ 04 января 2011

Если вы просто хотите проверить, существует он или нет, попробуйте не использовать count.Просто select username from users where username='webdev' LIMIT 1 может быть быстрее.

ТАКЖЕ, измените тип столбца на varchar, если это не такНе используйте text тип.Это намного медленнее.

2 голосов
/ 04 января 2011

Одна вещь, которую вы можете сделать, это изменить индексирование имени пользователя с index to unique, что сделает поиск намного быстрее, и, как сказал shamittomar, добавьте limit 1 в конце, даже если это поможет, только если значение уже существует.

2 голосов
/ 04 января 2011

Это может быть спорным вопросом, но чтобы проверить и посмотреть, существует ли имя пользователя, я бы выполнил следующий запрос (небольшое изменение запроса shamittomar):

SELECT DISTINCT `username` FROM `users` WHERE `username` = 'webdev';

Это будетпо умолчанию возвращает единственный экземпляр «webdev» в столбце «username»;если вы добавите больше параметров, это может изменить ваши результаты.Например, если вы запустите

SELECT DISTINCT `user_id`, `username` FROM `users` WHERE `username` = 'webdev';

, он вернет все уникальные комбинации "user_id" и "username".

0 голосов
/ 15 июля 2015

ваше имя пользователя уникально, поэтому вы должны установить ограничение 1 в вашем запросе, это будет быстрее

select count(uid) from users where username='webdev' limit 1
...