MyISAM Уникальных элементов в индексе ноль, это нормально?
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-02-04 17:02:30
- Откуда: Краснодар
MyISAM Уникальных элементов в индексе ноль, это нормально?
Вот столкнлся с аким явлением. На больших базах типа MyISAM не всегда считаются индексы. Показывает что уникальных элементов в индексе ноль. Хотя они должны там быть.
На одну такую базу попробовал перевести на innodb и элементы в индексе появились.
Это недостаток MyISAM и ничего с этим не поделаешь. Или как-то это лечится?
На одну такую базу попробовал перевести на innodb и элементы в индексе появились.
Это недостаток MyISAM и ничего с этим не поделаешь. Или как-то это лечится?
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-02-04 17:02:30
- Откуда: Краснодар
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?
Да просто как-то странно себя ведёт таблица эта. В ней 28 тыс. записей (3гига) и много ключей (600метров). Всего один ключ имеен 28 тыс. уникальных элементов. Но при этом если cделать explain выборку по любому полю на которое есть ключ, показывает что ключ используется. Только какое бы поле не проверяли размер ключа равен 4. Поэтому и думаю что что-то не так.
У меня раньше была база. Там правда было порядка 3 миллионов записеи и размер самой базы метров 800. На MyISAM тоже такой глюк вылазил и тормозить начинало. Конвертнул её в innodb и проблема пропала. Просто всё же хочется разобраться в чём причина и как это исправить можно. Наверняка кто-то уже сталкивался с этим.
MySQL 5.1.40
У меня раньше была база. Там правда было порядка 3 миллионов записеи и размер самой базы метров 800. На MyISAM тоже такой глюк вылазил и тормозить начинало. Конвертнул её в innodb и проблема пропала. Просто всё же хочется разобраться в чём причина и как это исправить можно. Наверняка кто-то уже сталкивался с этим.
MySQL 5.1.40
Последний раз редактировалось sasha181 2009-11-24 13:13:36, всего редактировалось 1 раз.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?
выложи структуру таблицы и результат explainsasha181 писал(а):Только какое бы поле не проверяли размер ключа равен 4. Поэтому и думаю что что-то не так.

-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-02-04 17:02:30
- Откуда: Краснодар
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` mediumtext NOT NULL,
`source` mediumtext NOT NULL,
`comments` mediumtext NOT NULL,
`text` longtext NOT NULL,
`rubric_id` int(11) NOT NULL,
`city_name` varchar(100) NOT NULL,
`city_id` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`type_id` int(11) NOT NULL,
`makedate` date NOT NULL,
`number` varchar(255) NOT NULL,
`last_id` int(11) NOT NULL,
`p_flag` int(3) NOT NULL,
`source_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `type` (`type`,`makedate`,`number`),
KEY `rubric` (`rubric_id`),
KEY `city` (`city_id`),
KEY `makedate` (`makedate`),
KEY `type_id` (`type_id`),
KEY `last_id` (`last_id`),
FULLTEXT KEY `title` (`title`),
FULLTEXT KEY `text` (`text`),
FULLTEXT KEY `number` (`number`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=30259 ;
mysql> show keys from `news` ;
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| news | 0 | PRIMARY | 1 | id | A | 27568 | NULL | NULL | | BTREE | |
| news | 0 | type | 1 | type | A | NULL | NULL | NULL | | BTREE | |
| news | 0 | type | 2 | makedate | A | NULL | NULL | NULL | | BTREE | |
| news | 0 | type | 3 | number | A | 27568 | NULL | NULL | | BTREE | |
| news | 1 | rubric | 1 | rubric_id | A | NULL | NULL | NULL | | BTREE | |
| news | 1 | city | 1 | city_id | A | NULL | NULL | NULL | | BTREE | |
| news | 1 | makedate | 1 | makedate | A | NULL | NULL | NULL | | BTREE | |
| news | 1 | type_id | 1 | type_id | A | NULL | NULL | NULL | | BTREE | |
| news | 1 | last_id | 1 | last_id | A | NULL | NULL | NULL | | BTREE | |
| news | 1 | title | 1 | title | NULL | NULL | NULL | NULL | | FULLTEXT | |
| news | 1 | text | 1 | text | NULL | NULL | NULL | NULL | | FULLTEXT | |
| news | 1 | number | 1 | number | NULL | NULL | NULL | NULL | | FULLTEXT | |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
12 rows in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `rubric_id` = 1 AND makedate = 1 AND number = 1;
+----+-------------+----------------+------+------------------------+--------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+------------------------+--------+---------+-------+------+-------------+
| 1 | SIMPLE | news | ref | rubric,makedate,number | rubric | 4 | const | 1 | Using where |
+----+-------------+----------------+------+------------------------+--------+---------+-------+------+-------------+
1 row in set, 2 warnings (0.20 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `rubric_id` = 1;
+----+-------------+----------------+------+---------------+--------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+--------+---------+-------+------+-------+
| 1 | SIMPLE | news | ref | rubric | rubric | 4 | const | 1 | |
+----+-------------+----------------+------+---------------+--------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `city_id` = 1;
+----+-------------+----------------+------+---------------+------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+-------+------+-------+
| 1 | SIMPLE | news | ref | city | city | 4 | const | 1 | |
+----+-------------+----------------+------+---------------+------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `makedate` = 1;
+----+-------------+----------------+------+---------------+----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+----------+---------+-------+------+-------------+
| 1 | SIMPLE | news | ref | makedate | makedate | 3 | const | 6780 | Using where |
+----+-------------+----------------+------+---------------+----------+---------+-------+------+-------------+
1 row in set, 3 warnings (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `type_id` = 1;
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | news | ref | type_id | type_id | 4 | const | 1 | |
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `last_id` = 1;
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | news | ref | last_id | last_id | 4 | const | 1 | |
+----+-------------+----------------+------+---------------+---------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `title` like 1;
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | news | ALL | title | NULL | NULL | NULL | 27568 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `text` = 1;
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | news | ALL | text | NULL | NULL | NULL | 27568 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)
mysql> EXPLAIN SELECT * FROM `news` WHERE `number` = 1;
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | news | ALL | number | NULL | NULL | NULL | 27568 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.01 sec)
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?

я бы под сомнение поставил полнотекстовый индекс number, он явно не нужен, а также уникальный индекс type, который включает в себя number длиной 255 символов на полную катушку. Ничего удивительного нет, в том что это всё тормозит.
плюс полнотекстовыми индексами надо правильно пользоваться, чтобы они работали, иначе толку от них никакого нет. А лучше и вовсе отказаться в пользу ключевиков, поскольку fullindex работает правильно по-моему только с инглишем.
-
- сержант
- Сообщения: 169
- Зарегистрирован: 2008-02-04 17:02:30
- Откуда: Краснодар
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?
Ясно. Большое Вам спасибо за помощь.
А то что нет уникальных элементов по ключам, это правильно? Так судя по содержимому этих полей, они там везде должны быть.
А то что нет уникальных элементов по ключам, это правильно? Так судя по содержимому этих полей, они там везде должны быть.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: MyISAM Уникальных элементов в индексе ноль, это нормально?
думаю да, иногда, чтобы избежать лишней нагрузки, она просто не считается. Но если есть сомнения, можно выполнить проверку таблицы или пересоздать индексы.sasha181 писал(а):А то что нет уникальных элементов по ключам, это правильно?
По первичному ключу и уникальному type она есть, а по остальным полям её и не нужно считать
