设置主键的关键作用:

有一条原则是,每个表必须要有一个主键。特别是关联表必须要设置多字段联合主键!

实践中的教训:

在我们的项目中,新项目的MySQL数据库是由老项目的SQL Server数据库导入的,

可能是由于不同数据库的原因,导入MySQL所有的表没有主键,这就带来了很大的问题,

但是由于MySQL对大部分没有主键的表自动进行了优化,问题没有马上体现出来。

直到MySQL执行到了这么一个语句,

SELECT * from shop_skuitems i where i.SpecId IN (SELECT SpecId s from shop_skurelation s where s.SkuId =#{skuId})

这是一个再简单不过的嵌套查询。b2c_shop_skurelation表是一个关联表,原来设置有三字段的联合主键。当没有了主键后,在MySQL5.5中

执行需要3分多钟的时间(我竟然耐心的等它执行了下来,,,)。当加上三字段联合主键后,速度就变成毫秒级的。性能差异巨大。

后来发现这个语句在当MySQL升级为5.7版本后,也可以自动优化了!MySQL原来越强大,DBA该何去何从啊,虽然我不是,但是!追求完美

精益求精的程序员是不允许在自己的项目中存在这种有缺陷的设计的!!!