Нужно ли обновлять индексы после TRUNCATE TABLE?

Labutin

Новичок
Нужно ли обновлять индексы после TRUNCATE TABLE?

Есть таблица у которой построены индексы:
ALTER TABLE table ADD INDEX ( col1 )
ALTER TABLE table ADD INDEX ( col2 )
Делаю TRUNCATE TABLE table;
и потом заполняю таблицу данными (INSERT'ы)
Вопрос: нужно ли после TRUNCATE TABLE что-то колдовать с индексами?
Поясню, почему возник вопрос. Если посмотреть на таблицу через phpMyAdmin, то там есть информация об индексах. И в поле "Количество элементов" стоит число. А вот после TRUNCATE TABLE и наполнения таблицы там написано "Нет". Т.е. индексы есть, а элементов в них нет.
Это как понимать?

-~{}~ 28.09.05 12:18:

MySQL 4.0.23
 

Labutin

Новичок
Судя по тому, что там написано, ничего дополнительного делать не нужно.
Тогда почему phpMyAdmin показывает, что элементов в индексах нет?

Забавно, если удалить один индекс удалить, то у оставшегося первого начинает показываться кол-во элементов.
Это баг или как?
Как убедиться, что индексы работают?
 

.des.

Поставил пиво кому надо ;-)
Если посмотреть на таблицу через phpMyAdmin, то там есть информация об индексах. И в поле "Количество элементов" стоит число. А вот после TRUNCATE TABLE и наполнения таблицы там написано "Нет". Т.е. индексы есть, а элементов в них нет.
Не знаю как там в phpmyadmin, но какого числа Вы ждете от пустой таблицы?
Как убедиться, что индексы работают?
http://dev.mysql.com/explain
 

Labutin

Новичок
Автор оригинала: .des.
Не знаю как там в phpmyadmin, но какого числа Вы ждете от пустой таблицы?

http://dev.mysql.com/explain
Почему пустой? Внимательней нужно читать то, что я пишу.
phpMyAdmin и show index после ЗАПОЛНЕНИЯ таблицы, предварительно очищенной с помощью TRUNCATE не показывают количество элементов в индексах :(
Я тут понял, что на самом деле проблема не в TRUNCATE, а в самих индексах. Попробуйте выполнить это:
drop table if exists tmp;
create table tmp (a int, b int);
insert into tmp values (1,2);
insert into tmp values (2,1);
alter table tmp add index (a);
alter table tmp add index (b);
show index from tmp;
Видно, что в индексах по 2 элемента.
А теперь так:
drop table if exists tmp;
create table tmp (a int, b int);
alter table tmp add index (a);
alter table tmp add index (b);
insert into tmp values (1,2);
insert into tmp values (2,1);
show index from tmp;
т.е. индексы создаем до заполнения таблицы.
Теперь в индексах нет элементов!!! :(
Это как понимать? Это фича MySQL?
 

MuXa247

Новичок
Сначала скажи зачем нужны индексы на две записи в базе? :)
 

Labutin

Новичок
MuXa247
Ты прикидываешься д... или посты накручиваешь? :(
Лучше бы по делу чего написал.
 

MuXa247

Новичок
Автор оригинала: Labutin
MuXa247
Ты прикидываешься д... или посты накручиваешь? :(
Лучше бы по делу чего написал.
Посты я не кручу и вроде не д...!
Если ты вспомнишь как работает поиск по индексу, то поймешь, что две записи не нуждаются в индексации...
 

Labutin

Новичок
Автор оригинала: MuXa247
Если ты вспомнишь как работает поиск по индексу, то поймешь, что две записи не нуждаются в индексации...
Т.е. мне нужно было запостить все полтора миллиона инсертов? Ты слышал про маленькие демонстрационные примеры для демонстрации ошибки/проблемы?
 

MuXa247

Новичок
Автор оригинала: Labutin
Т.е. мне нужно было запостить все полтора миллиона инсертов? Ты слышал про маленькие демонстрационные примеры для демонстрации ошибки/проблемы?
Извиняюсь, что не попробовал приведенные тобой примеры изначально, т.к. после запуска их мне выдалось 2 совершенно одинаковых результата с двумя индексами! MySQL 4.1.8
 

chira

Новичок
Labutin
совет (может не совсем по твоей проблеме) ...
если есть права на DROP/CREATE INDEX и вставляешь миллионы записей:
ALTER TABLE table DROP INDEX col1, DROP INDEX col2;
TRUNCATE TABLE ...
INSERT INTO table ...
ALTER TABLE table ADD INDEX ( col1 ), ADD INDEX ( col2 );

-~{}~ 29.09.05 13:01:

Автор оригинала: MuXa247
Сначала скажи зачем нужны индексы на две записи в базе? :)
можешь сказать где ты увидел индексацию двух записей?
 

Labutin

Новичок
chira
Согласен с тобой.
Но этот миллион вставляется не сразу, а постепенно.
 
Сверху