index под MySQL

5 отговора 171 прегледа
#1

index под MySQL

здравейте,

Имам следната заявка - нареждане по първата буква след кавичка в varchar (255) - ползвам това -

ORDER BY SUBSTRING(binary name, POSITION('\"' IN name) + 1, 1)

Интересно ми е какъв индекс мога да добавя (освен този на цялата колона). Мислех си и да направя нова колона, в която при вкарването на записа да записвам тази първа буква... може би и това е варианта?

Отговор
в отговор на q #2

Re: index под MySQL

Никакъв индекс няма да ти помогне

За да сортираш по резултат от функция трабва да се извлече стойността на name за всеки ред т.е. винаги ще се чете цялата таблица.

Варианта с новата колона е по-добър от гледна точка на бързодействие, но пък добавя излишък.

Най-добре е да нормализираш.

След като в name има две отделни неща разделени с \ то мястото им е в две отделни колонки.

А пък едната можеш да я индексираш само по първа буква и така с ще подобриш нещата във всяко едно отношение.

salle.online.bg/sig
Отговор
в отговор на salle #3

Re: index под MySQL

Благодаря , нещо такова и очаквах. Проблема е, че не са 2 различни неща, а са например ЕТ "Иван Ганчев" и ООД "Аз и брачеда", или "Друго" ЕТ - варна (например). Аз гоня първата буква след кавичка, която се очаква да е истинското име на фирмата. Най вероятно ще сложа нова колона, ако се окаже че производителността е зле ...

Отговор
в отговор на я #4

Re: index под MySQL

Аз съм начинаещ в MySQL, но от гледна точка на БД, това са си две полета:
- Тип на юридическото/физическото лице (ЕТ, ООД, ...)
- Име на лицето

Отговор
в отговор на NikB #5

Re: по скоро и двете :)

Най-добре е наистина да си добевиш колонка Тип. В случюя мисля, че идеална работа ти върши ЕNUM() - при това положение вътрешното представяне ще ти е цифрово съответно и индекс по ЕNUM ще е по-бърз.

От друга страна пък ако използваш този тип на различни места добре е да помислиш дали да не го изнесеш в отделна таблица.

Примерно:
(id TINYINT UNSIGNED PRIMARY KEY, type_name CHAR(16))

В същото време обаче си мисля, че задължително трябва да запазиш въпросното ЕТ, АД, ООД и т.н. като част от името защото май по нашите закони съкращението е неразделна част от името на фирмата.

salle.online.bg/sig
Отговор
в отговор на salle #6

Re: по скоро и двете :)

Мда... тъй ще е тя правилната. Ама някой трябваше да се сети малко по-рано за това.

Отговор