Задавайте вопросы, мы ответим
Вы не зашли.
Странные дела, товарищи, подскажите советом.
Mylsq 5.0.45
MS Server 2003R2x64
Есть скрипт, который герерит довольно большую БД, с таблицами примерно по 1,5-2 Гб
В частности он создает индексы. Но если после генерации сделать SHOW INDEX FROM table то можно наблюдать вот такую картину:
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
table 0 PRIMARY 1 code A 1 NULL NULL BTREE
table 1 ix_f1 1 f1 A 1 NULL NULL YES BTREE
table 1 ix_f2 2 f2 A 1 NULL NULL YES BTREE
table 1 ix_f3 3 f3 A 1 NULL NULL YES BTREE
table 1 ix_f4 1 f4 A 1 NULL NULL YES BTREE
....................................
table 1 ixf_fn 1 fn NULL NULL NULL NULL YES FULLTEXT
Т.е. у всех индексов Cardinality = 1 и индексы при последующих запросах не используются.
Таблиц таких много, для большинства из них индексы создаются нормально, а для некоторых вот такая фигня
Если выполнить анализ таблиц - то все стает на свои места, но это имхо не объясняет в чем проблема.
Еще момент, раньше сервер был на Unix (с точно таким же набором скриптов и таблиц) - там этой проблемы не было
Неактивен
Вообще говоря, после вставки большого количества данных, рекомендуется анализировать
таблицы. Как альтернативу можно использовать ALTER TABLE DISABLE/ENABLE KEYS до и
после больших вставок (что ускорит вставки и обновит индекс целиком в конце).
Почему работало на UNIX - сложный вопрос. Другая версия MySQL?
Неактивен
версия mysql одинаковая - 5.0.45
disable/enable keys и используется, в том то и дело
загрузка происходит вот так:
alter table t1_temp disable keys; <- выключаем ключи load data local infile "../data.csv" into table t1_temp; <- здесь вгружаем данные во временную таблицу rename table t1_temp to t1; <- переименовываем alter table t1 enable keys; <- включаем ключи
analyse не хочется просто вписать, потому что это больше похоже на заплатку. Я понимаю, что его рекомендуется использовать, но без него индексы тоже должны создаваться, пусть и использоваться не самым корректным образом.
Неактивен
Есть еще и другие таблицы, тоже большие, вот пример show index:
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t_fields 1 nKey 1 nKey A NULL NULL NULL YES BTREE
t_fields 1 nKey 2 nField A NULL NULL NULL YES BTREE
вообще NULL!!!!
до кучи вот структура:
CREATE TABLE `t_fields` (
`nField` tinyint(4) default NULL,
`nKey` int(11) default NULL,
`nRecordKey` int(11) default NULL,
KEY `nKey` (`nKey`,`nField`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
в чем может быть дело? в лога ничего особенного не надлюдается.
если сделать enable keys - ничего не меняется
Отредактированно Shopen (29.01.2008 12:33:01)
Неактивен
Про NULL это я наврал - глаз замылился и не заметил, что таблица пустая, вот и null.
В заполненной таблице стоят единицы. Any ideas?
Неактивен
Данные секретные? Можете прислать кусочек на поковыряться? Такое впечатление,
что это таки бага MySQL
Неактивен
нет, не секретные
почта?
Неактивен
sakila@sqlinfo.ru
Неактивен