/ / Колонка varchar та питання про індекс чи повний текст? - php, mysql

Стовпчик varchar і випуск про індекс або повний текст? - php, mysql

Ну, у мене на столі таблиця varchar у колонці для пароля, а в деяких сценаріях я роблю запити на зразок:

length(column_varchar) < 10

Моє запитання: якщо я покладу індекс на цю колонку, це допоможе? або в цьому випадку слід використовувати fulltext? чи не потрібен індекс?

Ще одне питання, що мені потрібно використовувати індекс у всіх стовпцях, які будуть використовуватися в "де"?

Дякую заздалегідь.

Відповіді:

2 для відповіді № 1

Індекси використовуються для індексації вмісту (значення поля),не довжина поля, тому жоден індекс не може допомогти у наведеному вище запиті. (Зверніть увагу: ви можете мати просторове поле, яке має довжину вмісту та індексує це поле.) Також пароль повинен зберігатися у хешованому форматі, тому всі довжини паролів повинні бути однаковими або, принаймні, не повинні бути критеріями для відбір.

Ні, не слід індексувати всі стовпці, які будутьвикористовується в умовах, де критерії. Вибір оптимальної структури індексу - складна і дуже широка тема. Завжди враховуйте наступні моменти, намагаючись визначити, які поля (або комбінацію полів) індексувати:

  1. Індекси прискорюють вибір, але сповільнюють модифікацію даних, оскільки вам доведеться також оновлювати індекс, а не лише значення стовпця.

  2. MySQL може використовувати лише 1 індекс на таблицю у запиті.

  3. MySQL використовує вибірковість індексів длявизначте, який з них використовувати. Поле, яке може мати лише 2 значення (так / ні, правда / хибність), недостатньо вибіркове, тому не турбуйте себе з його індексуванням.

  4. Завжди використовуйте explain команда, щоб перевірити, які індекси використовують ваші запити.


0 для відповіді № 2

У вас тут є два питання, взагалі слід розділити питання.

У будь-якому випадку, перший "Чи допоможе це проіндексувати стовпчик, де ви робите тест на довжину".

Ні, це виграло "т. Єдиним способом, який ви могли б покращити продуктивність тут, було б мати додатковий стовпець, який містить довжину значення в колонці_varchar та індексує це.

Ви писали в коментарях, які ви тримаєтехеші, тому довжина буде однаковою, тому я мушу здогадуватися, що деякі паролі є нульовими, і тому ви не хеште їх, або що ви переходите з не хешованих до хешованих.

Друге питання: чи слід індексувати всі поля в пункті «де». Це не автоматичний так, саме тому є книги, написані про оптимізацію запитів.

Це залежить від того, скільки користі ви отримаєте від індексу, а це залежить від характеру даних.

Основна торгівля - між швидкістю вставки та швидкістю запиту. Індексує повільні вставки та пришвидшує запити.

Наступне, що слід врахувати - вибірковість. Якщо значення, яке ви індексуєте, має лише три потенційні значення, наприклад, базі даних буде потрібно часто оновлювати індекс, щоб отримати з нього реальне значення.

У цьому конкретному випадку у вас рівномірнорозподілених даних (тому що вони хешовані), ви маєте велику вибірковість (у MD5 мало зіткнень), і ви очікуєте, що запити будуть частіше за допомогою одного терміна, тому вам обов'язково слід індексувати цей стовпець.