Задавайте вопросы, мы ответим
Вы не зашли.
Господа, что вы думаете по следующему вопросу.
Допустим есть две таблицы, в одной (t1) есть колонка типа text
в другой (t2) есть тоже колонка типа текст + колонка с хэшем текстового поля md5(текст), по которой есть индекс.
Если мне нужно сравнить два значения из разных колонок допустим в where, то какой вариант будет быстрее и почему?
SELECT * FROM t1,t2
WHERE t1.text = t2.text
или
SELECT * FROM t1,t2
WHERE md5(t1.text) = t2.md5
Неактивен
Второй вариант скорее всего быстрее, так как будет использован индекс, но все зависит от числа строк в таблицах. Лучше всего в первой таблице тоже иметь поле с md5(text), которое можно поддерживать в актуальном состоянии триггерами.
Неактивен
Индекс лучше всего иметь в той таблице, в которой значительно больше записей, так как по второй таблице будет в таком случае перебор всех значений. Хеш-индексы лучше, чем индексы по текстовому полю, так как они
1. более случайны, то есть практически исключены общие куски (например, чтобы понять, что "корова" и "коробка" отличаются, надо сравнить первые 5 символов, тогда как их хеши отличаются скорее всего уже в первом символе)
2. занимают меньше места (кстати, индексы по текстовому полю могут быть не более 1000 байт, так что полного сравнения по индексу не произойдет)
В данном случае хеш-индекс Вы создаете руками (как B-Tree индекс над полем равным hash(text)). Оптимальнее конечно использовать механизм хранения со встроенными хеш-индексами, но пока это только ndb и memory). Если Вам потребуется сравнивать текст без учета регистра, то md5 следует заменить на md5(lower(text))
Неактивен