Записки разработчика таксономия taxonomy_get_term_by_name

Главные вкладки

Аватар пользователя Demimurych Demimurych 9 октября 2008 в 11:28

Изучая внутренности таксономии (функционал и как он реализован на уровне кода) обнаружил интересную функцию
taxonomy_get_term_by_name($name)

которая возвращает данные по названию термина

$db_result = db_query(db_rewrite_sql("SELECT t.tid, t.* FROM {term_data} t WHERE LOWER('%s') = LOWER(t.name)", 't', 'tid'), trim($name));

забавно то что структура данных

CREATE TABLE `term_data` (
`tid` int(10) unsigned NOT NULL auto_increment,
`vid` int(10) unsigned NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`description` longtext,
`weight` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`tid`),
KEY `vid` (`vid`)
) ENGINE=MyISAM AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 AUTO_INCREMENT=44 ;

не содержит ключа для name

из чего следует что если таксономия будет использоваться очень обширно - использоваине этой функции крайне нежелательно. Либо добавить ключ
ALTER TABLE `term_data` ADD INDEX(`name`)

Комментарии

Аватар пользователя andypost@drupal.org andypost@drupal.org 9 октября 2008 в 16:20

Ключ может понадобиться, если часто используются теги. А вообще такие вещи лучше выявлять с помощью devel^module - ибо этот ключ может изменить план выполнения других запросов.