【问题标题】:How to Ignore automatically increased primary id on myIsam insert ignore?如何在 myIsam 插入忽略时忽略自动增加的主 ID?
【发布时间】:2017-08-03 03:18:20
【问题描述】:

如何在 myIsam 插入忽略时忽略自动增加的主 ID? 如何解决这个问题呢? 这会迅速增加主 ID。如何解决这个问题

我的表格结构

    | 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)

【问题讨论】:

  • 这张表应该代表什么?

标签: php mysql primary-key auto-increment myisam


【解决方案1】:
  • 表是InnoDB,为什么要提到MyISAM?
  • 摆脱id,它可能没有任何用处。相反,将date_raw 提升为PRIMARY KEY
  • 避免冗余索引 - PRIMARY KEYUNIQUE KEYKEY
  • 通常最好将年+月+日保留在单个DATE 列中,然后在需要时将其分开。
  • 你真的使用created_onmodified_on吗?还是那是某些 3rd 方软件的产物?
  • DATE 上建立索引更有效,然后使用类似的东西

这个:

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

通过这些更改,您消除了一半的列和大部分索引。 INSERT IGNORE 将不再给您带来麻烦。

如果你保留AUTO_INCREMENT,那么让我们看看更多的逻辑——需要看看为什么IGNORE会生效。解决方案可能涉及到INSERT之外的一些其他代码。

这是数据仓库中星型模式的一部分,然后我将吐槽规范化“连续”值是多么糟糕,例如DATE。那时,整张桌子都消失了。 而且代码会运行得更快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2011-01-14
    相关资源
    最近更新 更多