index под MySQL
5 отговора
171 прегледа
index под MySQL
здравейте,
Имам следната заявка - нареждане по първата буква след кавичка в varchar (255) - ползвам това -
ORDER BY SUBSTRING(binary name, POSITION('\"' IN name) + 1, 1)
Интересно ми е какъв индекс мога да добавя (освен този на цялата колона). Мислех си и да направя нова колона, в която при вкарването на записа да записвам тази първа буква... може би и това е варианта?
Имам следната заявка - нареждане по първата буква след кавичка в varchar (255) - ползвам това -
ORDER BY SUBSTRING(binary name, POSITION('\"' IN name) + 1, 1)
Интересно ми е какъв индекс мога да добавя (освен този на цялата колона). Мислех си и да направя нова колона, в която при вкарването на записа да записвам тази първа буква... може би и това е варианта?
Re: index под MySQL
Никакъв индекс няма да ти помогне
За да сортираш по резултат от функция трабва да се извлече стойността на name за всеки ред т.е. винаги ще се чете цялата таблица.
Варианта с новата колона е по-добър от гледна точка на бързодействие, но пък добавя излишък.
Най-добре е да нормализираш.
След като в name има две отделни неща разделени с \ то мястото им е в две отделни колонки.
А пък едната можеш да я индексираш само по първа буква и така с ще подобриш нещата във всяко едно отношение.
salle.online.bg/sig
За да сортираш по резултат от функция трабва да се извлече стойността на name за всеки ред т.е. винаги ще се чете цялата таблица.
Варианта с новата колона е по-добър от гледна точка на бързодействие, но пък добавя излишък.
Най-добре е да нормализираш.
След като в name има две отделни неща разделени с \ то мястото им е в две отделни колонки.
А пък едната можеш да я индексираш само по първа буква и така с ще подобриш нещата във всяко едно отношение.
salle.online.bg/sig
Re: index под MySQL
Благодаря , нещо такова и очаквах. Проблема е, че не са 2 различни неща, а са например ЕТ "Иван Ганчев" и ООД "Аз и брачеда", или "Друго" ЕТ - варна (например). Аз гоня първата буква след кавичка, която се очаква да е истинското име на фирмата. Най вероятно ще сложа нова колона, ако се окаже че производителността е зле ...
Re: index под MySQL
Аз съм начинаещ в MySQL, но от гледна точка на БД, това са си две полета:
- Тип на юридическото/физическото лице (ЕТ, ООД, ...)
- Име на лицето
- Тип на юридическото/физическото лице (ЕТ, ООД, ...)
- Име на лицето
Re: по скоро и двете :)
Най-добре е наистина да си добевиш колонка Тип. В случюя мисля, че идеална работа ти върши ЕNUM() - при това положение вътрешното представяне ще ти е цифрово съответно и индекс по ЕNUM ще е по-бърз.
От друга страна пък ако използваш този тип на различни места добре е да помислиш дали да не го изнесеш в отделна таблица.
Примерно:
(id TINYINT UNSIGNED PRIMARY KEY, type_name CHAR(16))
В същото време обаче си мисля, че задължително трябва да запазиш въпросното ЕТ, АД, ООД и т.н. като част от името защото май по нашите закони съкращението е неразделна част от името на фирмата.
salle.online.bg/sig
От друга страна пък ако използваш този тип на различни места добре е да помислиш дали да не го изнесеш в отделна таблица.
Примерно:
(id TINYINT UNSIGNED PRIMARY KEY, type_name CHAR(16))
В същото време обаче си мисля, че задължително трябва да запазиш въпросното ЕТ, АД, ООД и т.н. като част от името защото май по нашите закони съкращението е неразделна част от името на фирмата.
salle.online.bg/sig
Re: по скоро и двете :)
Мда... тъй ще е тя правилната. Ама някой трябваше да се сети малко по-рано за това.