Краткий ответ:
Хеширование - создание поля проверки на некоторых данных (для обнаружения, когда данные изменяются). Это - один способ, которым функция и исходные данные не могут быть получены из хеша. Типичные стандарты для этого являются SHA-1, SHA256 и т.д.
, Путаница - изменяет Ваши данные/код для смущения кого-либо еще (никакая реальная защита). Это может или не может освободить некоторые исходные данные. Нет никаких реальных стандартов для этого.
Шифрование - использование ключа для преобразования данных так, чтобы только те с корректным ключом могли понять его. Зашифрованные данные могут быть дешифрованы для получения исходных данных. Типичные стандарты являются DES, TDES, AES, RSA и т.д.
Вы хотите убедиться, что запрос будет использовать ТОЛЬКО индекс, поэтому убедитесь, что индекс охватывает все поля, которые вы выбираете. Кроме того, поскольку это запрос диапазона, вам необходимо сначала указать венид в индексе, поскольку он запрашивается как константа. Поэтому я бы создал и проиндексировал так:
ALTER TABLE events ADD INDEX indexNameHere (venid, date, time);
С этим индексом вся информация, необходимая для выполнения запроса, находится в индексе. Это означает, что, как мы надеемся, подсистема хранения может извлекать информацию, не обращаясь к самой таблице. Однако MyISAM может быть не в состоянии сделать это, поскольку он не хранит данные в листьях индексов, поэтому вы можете не получить желаемого увеличения скорости. В этом случае попробуйте создать копию таблицы и используйте для этой копии механизм InnoDB. Повторите те же шаги и посмотрите, получится ли у вас значительное увеличение скорости. InnoDB действительно сохраняет значения полей в листах индекса и позволяет покрывать индексы.
Теперь, надеюсь, вы увидите следующее, когда объясните запрос:
mysql> EXPLAIN SELECT date, time FROM events WHERE venid='47975' AND date>='2009-07-11' ORDER BY date;
id select_type table type possible_keys key [..] Extra
1 SIMPLE events range date_idx, indexNameHere indexNameHere Using index, Using where
Попробуйте добавить ключ, который охватывает вениду и дату (или наоборот, или и то, и другое ...)
Я полагаю, что таблица с 6 миллионами строк должна быть оптимизирована с помощью вполне обычных методов.
Я предполагаю, что у вас есть выделенный сервер базы данных, и у него есть разумное количество оперативной памяти (скажем, минимум 8G.)
Вам нужно убедиться, что вы настроили mysql для эффективного использования оперативной памяти. Если вы используете 32-битную ОС, не делайте этого. Если вы используете MyISAM, настройте свой ключевой буфер, чтобы использовать значительную, но не слишком большую часть оперативной памяти.
В любом случае вы захотите провести повторное тестирование производительности на оборудовании производственного уровня.