在第<High Performance MySQL页的第177页中,有一个提示“何时主键顺序更糟”
对于高并发工作负载,按主键顺序插入实际上可以在InnoDB中创建争用点。主键的高端是一个热点。因为所有插入都在此处进行,所以并发插入可能会争夺下一个键锁定。另一个热点是AUTO_INCREMENT锁定机制。如果遇到问题,则可以重新设计表或应用程序,或配置innodb_autoinc_lock_mode。如果您的服务器版本不支持innodb_auto inc_lock_mode,则可以升级到较新的InnoDB版本,以在此特定工作负载下表现更好。
如何理解概念主键的上端?
答案 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
的任何东西。显然,在此示例中,您没有太多选择!