如何理解主键的高端?

时间:2018-11-29 15:35:24

标签: mysql

在第<High Performance MySQL页的第177页中,有一个提示“何时主键顺序更糟”

  

对于高并发工作负载,按主键顺序插入实际上可以在InnoDB中创建争用点。主键的高端是一个热点。因为所有插入都在此处进行,所以并发插入可能会争夺下一个键锁定。另一个热点是AUTO_INCREMENT锁定机制。如果遇到问题,则可以重新设计表或应用程序,或配置innodb_autoinc_lock_mode。如果您的服务器版本不支持innodb_auto inc_lock_mode,则可以升级到较新的InnoDB版本,以在此特定工作负载下表现更好。

如何理解概念主键的上端

1 个答案:

答案 0 :(得分:1)

这本书的意思是“表中使用的主键的当前最大值”。

这是说,如果您继续以升序的主键顺序插入,则可能会影响性能,因为(在自动递增的情况下)“此主键的下一个值”是必须生成并自动使用的,并且因为(在其他情况下)有一些实施因素会使它变慢一些。

如果我有一个表,其中行的主键值为class MYString { private: int m_lg; char * m_ptr; MYString (int, const char *); public: MYString (); MYString (const char *); ~MYString (); MYString (const String & ); }; MYString::MYString (int lg, const char * str) : m_lg(lg), m_ptr(new char[lg]) { strcpy ( m_ptr, str ); } MYString::MYString() : MYString(1, "") {} MYString::MYString (const char * str) : MYString(strlen(str) + 1, str) {} MYString::MYString(const String & other) : MYString(other.m_lg, other.m_ptr) {} MYString::~MYString() { delete [] m_ptr; } ,则在“高端”插入意味着插入主键值大于1, 2, 3, 4的任何东西。显然,在此示例中,您没有太多选择!