В какой момент индексы mySQL начинают иметь значение с простым выбором? - PullRequest
1 голос
/ 10 августа 2011

У меня есть таблица, которая медленно растет, позвоните people
, в настоящее время есть 50 000 записей, и она получает около 5000 в месяц.

Она была написана кем-то (не мной!)
, которые не добавляли никаких индексов,
и существует множество запросов, которые используют не-pk, где предложения.

Например:

select * from people where email = 'person@gmail.com';

В соответствии с клиентом командной строки mysql это выполняется за время "0" ...

1 row in set (0.00 sec)

Я также пытался, впопытка сделать более медленный запрос:

# attempt!
select * from people where email like 'Name%';

# result
23 rows in set (0.00 sec)

Насколько я понимаю, такой запрос выполняет полное сканирование таблицы.
Так что, если полное сканирование таблицы из 50 000 строк занимает менее 1/100 отво-вторых,
в какой момент он на самом деле становится медленнее?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

С 50 000 записей , вероятно, имеет смысл создать индекс для помощи с запросами (или, возможно, более одного индекса в зависимости от запросов и частоты их выполнения).А поскольку ежемесячно добавляется только 5000 записей, поддержание индекса (если не много других обновлений) не должно быть очень дорогостоящим.

Я не знаю, насколько точен таймер для этих результатов, ноПо всей вероятности, полное сканирование таблицы может произойти менее чем за 1/100 секунды (в зависимости от того, насколько агрессивно кэширование и насколько велик физический размер записи).Я только что выполнил запрос на своем собственном ПК для разработки (с совершенно другим механизмом базы данных), который сделал полное сканирование таблицы 40000 записей за 0,013 секунды.И мой компьютер для разработки не является чем-то особенным.

(У меня не было удобной таблицы записей 50 000 в базе данных MySQL, но у меня была таблица записей 40 000, сразу доступная для другой базы данных. Таким образом, сравнение может быть не совсем сопоставимым, но, вероятно,на обед.)

1 голос
/ 10 августа 2011

Вы получите значительное снижение производительности, когда начнете объединять свои таблицы и выполнять более сложные запросы, чем выберите *. Или когда ваша таблица станет немного больше (производительность также зависит от вашего оборудования, поэтому трудно сказать, когда вам понадобится добавлять индексы).

Индексы действительно легко добавить, однако, чтобы добавить индекс в столбец электронной почты, вы просто выполните:

ALTER TABLE people ADD INDEX (email);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...