Я прочитал о псевдо-хэш-индексе в книге оптимизации производительности MySQL и заметил, что они могут помочь повысить производительность в таких запросах, как
... WHERE `slug` = '$slug'
Мы можем добавить поле sulg_hash
в БД и индексировать его.
После этого сделать
UPDATE `table` SET `slug_hash` = CRC32(`slug`)
Тогда нам просто нужно заменить
... WHERE `slug` = '$slug'
на
... WHERE `slug_hash` = CRC32('$slug') AND `slug` = '$slug'
Потому чтоslug_hash
поле индексируется, системе нужно меньше времени, чтобы найти нужную нам строку, но это поле не uniq, поэтому мы оставляем в запросе `slug` = '$ slug'.
Вместо этого мы можем индексировать slug
поле.из slug_hash
, но я действительно надеюсь, что целочисленный индекс будет работать намного быстрее, чем текстовый индекс.
Также мы можем заменить встроенную функцию mysql CRC32 на php CRC32 function.
Проблемы:
- Для небольших таблиц это будет работать медленнее, чем простой запрос `slug` = '$ slug'.
- В слишком больших таблицах мы можем иметь много коллизий, поэтому он будет работать медленнее.
Есть ли проблемы, которые делают это изменениене интересно увеличение производительности?
PS $slug
экранируется в начале кода.
UPDATE: $slug
содержит не латинские символы в моем случае.Я думаю, что это сделает поиск медленнее, верно?