Как игнорировать автоматически увеличенный первичный идентификатор при игнорировании вставки myIsam?

Как автоматически игнорировать увеличение основного идентификатора при вставке myIsam?
Как решить эту проблему?
Это быстро увеличивает первичный идентификатор. Как решить это

МОЯ СТОЛОВАЯ СТРУКТУРА

    | dates_tbl | CREATE TABLE `dates_tbl` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date_raw` int(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL DEFAULT '0000-00-00',
`day` tinyint(2) unsigned NOT NULL DEFAULT '0',
`week` tinyint(2) unsigned NOT NULL DEFAULT '0',
`month` tinyint(2) unsigned NOT NULL DEFAULT '0',
`year` year(4) NOT NULL DEFAULT '0000',
`created_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `date_raw_unique` (`date_raw`),
KEY `date_raw` (`date_raw`),
KEY `month_year` (`month`,`year`),
KEY `year` (`year`)
) ENGINE=InnoDB AUTO_INCREMENT=21628 DEFAULT CHARSET=latin1 |

Вставить запрос

    $q = "INSERT IGNORE INTO dates_tbl(date_raw,date,day,week,month,year,created_on)
values $dynamic_value";

РЕЗУЛЬТАТ

mysql> select id from dates_tbl limit 10;
+-------+
| id    |
+-------+
| 19657 |
| 19681 |
| 19729 |
| 19777 |
| 19825 |
| 19873 |
| 19884 |
| 19913 |
| 19960 |
| 20007 |
+-------+
10 rows in set (0.01 sec)

0

Решение

  • Таблица InnoDB, почему вы упоминаете MyISAM?
  • Избавляться от idэто, вероятно, не имеет смысла. Вместо этого, продвигать date_raw быть PRIMARY KEY,
  • Избегайте избыточных индексов — PRIMARY KEY это UNIQUE KEY это KEY,
  • Обычно лучше хранить год + месяц + день в одном DATE колонку, а затем, когда это необходимо, разберите ее на части.
  • Вы действительно используете created_on а также modified_on? Или это артефакт какого-то стороннего программного обеспечения?
  • Более эффективно иметь индекс на DATEзатем используйте что-то вроде

этот:

WHERE ymd >= '2010-03-01'
AND ymd  < '2010-03-01' + INTERVAL 1 MONTH

С этими изменениями вы удалили половину столбцов и большую часть индексов. И INSERT IGNORE перестанет доставлять вам неприятности.

Если вы сохраните AUTO_INCREMENT, тогда давайте посмотрим еще немного логики — нужно понять, почему IGNORE вступает в силу. Решение может включать в себя некоторый другой код в дополнение к INSERT,

Это часть звездообразной схемы в хранилище данных, поэтому я расскажу о том, как плохо нормализовать «непрерывные» значения, такие как DATE, В этот момент вся таблица исчезает. И код будет работать быстрее!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]