美文网首页
《高性能MySQL》读书摘录之一

《高性能MySQL》读书摘录之一

作者: 水影sta | 来源:发表于2017-11-08 21:53 被阅读0次

    20171108

    死锁怎么处理(P10)

    • (如果事务出现死锁)大多数情况下只需要重新执行因死锁回滚的事务即可。
    • 目前在代码中通过try捕获异常,如果异常为死锁,则重新执行该事务

    InnoDB次级索引包含主键列(P17)

    • InnoDB的次级索引(非主键索引)中必须包含主键列,所以如果主键列很大的话,其他的所有索引都会很大。因此,表上索引较多的话,主键应该尽可能的小。
    • 所以,一般表的主键尽量用自增的Id
    • 非Id为主键的表,确实性能比较差

    Memory表与查询极慢BLOB,TEXT(P21,P118)

    • 查询中间结果超过Memory表的限制,或者包含BLOB或者TEXT字段,则会在硬盘中生成临时表,效率极低
    • Memory引擎不支持BLOB和TEXT,所以只能使用磁盘临时表
    • 在查询的时候,尽量使用SUBSTRING(column,length),order by也适用,但是截取长度要注意,临时表大小不要超过tmp_table_size
    • 也可以调整max_length_for_sort_data来排序BLOB和TEXT(还是需要磁盘临时表)
    • 我们有一个包含MEDIUMBLOB数据的表,有几十万行,大小几个G;对该表的部分查询(count,order,group等),速度极慢;一个count要运行几分钟

    尽量避免使用NULL(P112)

    • 对于InnoDB,NULL是通过单独的bit来存储的,所以不成立
    • 对于其他引擎,有索引的列尽量避免使用NULL

    整数类型宽度(P113)

    • 对于存储和计算来说,INT(1)和INT(20)是相同的

    CHAR和VARCHAR(P115)

    • UTF-8字符集,尽量使用VARCHAR
    • 存储定长的值,适合用CHAR,例如MD5码

    设计注意点(P117,P127)

    • 尽量使用更短的列
    • 避免太多的列
    • 避免太多的关联
    • 混用范式和反范式(根据实际需要)

    相关文章

      网友评论

          本文标题:《高性能MySQL》读书摘录之一

          本文链接:https://www.haomeiwen.com/subject/fbqumxtx.html