SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.07.2012 13:47:39

pomuk123
Участник
Зарегистрирован: 23.11.2010
Сообщений: 11

Инедкс и разное количество строк в таблицах

Доброго время суток.
У меня такая проблема. Есть 2 абсолютно идентичные таблицы по структуре. В одной хранятся данные рабочего проекта ( записей около 1,8 миллиона ), а другая для тестирования, где я вношу разные изменения для тестов. Дак вот. Я создал индекс  в тестовой таблице (где мало записей) и он удачно отработал по запросу. Потом я точно такой же создал уже в основной таблице( где 1,8 миллиоан записей) и там он с успехом провалился, и в эксплэйне мне выдало файлсорт. Версия базы данных mysql-server-5.1.22. Из-за чего произошла такая ситуация? Ниже приведины дампы таблиц и запросы.


| FacebookBirthday | CREATE TABLE `FacebookBirthday` (
  `fbID` bigint(20) unsigned NOT NULL,
  `year` smallint(5) unsigned NOT NULL,
  `month` tinyint(3) unsigned NOT NULL,
  `day` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`fbID`),
  KEY `ix_bd` (`day`,`month`,`year`),
  KEY `ix_month_day` (`month`,`day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

| FacebookBirthdayTest | CREATE TABLE `FacebookBirthdayTest` (
  `fbID` bigint(20) unsigned NOT NULL,
  `year` smallint(5) unsigned NOT NULL,
  `month` tinyint(3) unsigned NOT NULL,
  `day` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`fbID`),
  KEY `ix_bd` (`day`,`month`,`year`),
  KEY `ix_month_day` (`month`,`day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |


Explain


explain SELECT * FROM FacebookBirthday WHERE fbID IN (100002903938789,100002912073949,100003102251184,100003490075487,1072137856,1134930022,1568329778,1753344728,100000497671423,100000736316579,100001024075426,100001390005020,100001463863250,100001648249993) AND UNIX_timestamp(CONCAT_WS('-',2012, month, day)) - UNIX_timestamp('2012-07-27') < 0 ORDER BY month, day;
+----+-------------+------------------+-------+---------------+---------+---------+------+------+-----------------------------+
| id | select_type | table            | type  | possible_keys | key     | key_len | ref  | rows | Extra                       |
+----+-------------+------------------+-------+---------------+---------+---------+------+------+-----------------------------+
|  1 | SIMPLE      | FacebookBirthday | range | PRIMARY       | PRIMARY | 8       | NULL |   14 | Using where; Using filesort |
+----+-------------+------------------+-------+---------------+---------+---------+------+------+-----------------------------+


explain SELECT * FROM FacebookBirthdayTest WHERE fbID IN (100002903938789,100002912073949,100003102251184,100003490075487,1072137856,1134930022,1568329778,1753344728,100000497671423,100000736316579,100001024075426,100001390005020,100001463863250,100001648249993) AND UNIX_timestamp(CONCAT_WS('-',2012, month, day)) - UNIX_timestamp('2012-07-27') < 0 ORDER BY month, day;

+----+-------------+----------------------+-------+---------------+--------------+---------+------+------+-------------+
| id | select_type | table                | type  | possible_keys | key          | key_len | ref  | rows | Extra       |
+----+-------------+----------------------+-------+---------------+--------------+---------+------+------+-------------+
|  1 | SIMPLE      | FacebookBirthdayTest | index | PRIMARY       | ix_month_day | 2       | NULL |    4 | Using where |
+----+-------------+----------------------+-------+---------------+--------------+---------+------+------+-------------+
 

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson