Задавайте вопросы, мы ответим
Вы не зашли.
Что-то не могу понять. Перевёл таблицу где учитываются пользователи онлайн на хранилище MEMORY.
Всё вошло сразу в память, но индексы не работают никакие кроме первичного. Это нормально? Напротив остальных индексов стоит 0. В таблице типа MYISAM они играли роль не малую, а тут индексы памяти не касаются что ли? Просто понять не могу.
Также пишет что таблица фрагментирована, однако OPTIMIZE TABLE не исправляет сие штуку. Это тоже нормально?
Вообще хотелось бы пояснений, заранее спасибо.
Неактивен
Таблички MEMORY отличаются от табличек MyISAM в первую очередь тем, что индексы (без явного
указания) строятся как HASH, а не как BTREE. Соответственно, на запросах типа ">=" они не работают.
Что касается "стоит 0", "пишет, что фрагментирована" - где стоит и где пишет?
Неактивен
Гм то есть мои все индексы идут нафег... А это очень играет на производительности? или поскольку в памяти, то не будет ощютимо замедление производительности?
В phpmyadmin
ADD: вот сейчас на сайте 2 человека и один есть в индесах. По какой логике это происходит не пойму. Типы индексов и структуру таблицы не менял тупо сменил STORAGE ENGINE.
Отредактированно Proger (05.02.2009 13:50:03)
Неактивен
Когда делаете индекс - напишите в явном виде тип индекса для диапазонных случаев:
ALTER TABLE tablename ADD INDEX idxname (columnname) USING BTREE;
P.S. phpmyadmin - бяка
Неактивен
Mysql Query Browser вроде позволяет BTREE крутить...
Знаю, но удобно блин...
Спасибо, понял
Неактивен
Поднимаю тему ибо...
Поменял индексы на BTREE дык вообще понулям все индексы (в том числе и примари). Притом любой EXPLAIN простейшего запроса с условием = >= и т.п. выводит что ключей вообще нет. FORCE INDEX может в данном случае помочь?
Отредактированно Proger (11.02.2009 14:46:29)
Неактивен
Приведите более конкретный пример, чтобы можно было воспроизвести. FORCE INDEX не поможет
Неактивен
Дамп:
Отредактированно Proger (11.02.2009 20:09:47)
Неактивен
У меня все в порядке:
Неактивен
хм как интерестно... у меня possible_keys NULL key NULL...
щаз попробую через консоль сделать это же... до этого я пробывал через phpmyadmin с удалённой машины...
Неактивен
mysql> EXPLAIN SELECT * FROM `online` WHERE `time` >= 1234372039;
+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | online | range | time | time | 4 | NULL | 2 | Using where |
+----+-------------+--------+-------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)
Как интерестно... phpmyadmin то чего так тупит то... Ладно спасибо, буду знать сие особенность. Вообще phpmyadmin как то странно работает с хранилищем MEMORY.
ADD теперь и в phpmyadmin EXPLAIN работает. Ничего вообще не понимаю. Правда до этого я смотрел explain запроса с условием на другое поле, но разница то... кароче прошу прощения за беспокойство.
Отредактированно Proger (11.02.2009 20:52:27)
Неактивен