zoukankan      html  css  js  c++  java
  • mysql笔记

    http://blog.csdn.net/aacm1992/article/details/53025747

    转载:

    从项目管理视角看,将已知风险列出风险应对计划,未知风险越早发现后期付出的代价越小。软件项目中也一样,在产品迭代过程中,尽量将表结构设计优雅一点。
    msyql设计
    MySQL单表存储大数据时考虑如下方面:
    1. 考虑旧数据归档,让单表数据尽量少
    2. 考虑数据冷热,比如某些字段访问频繁,某些恰相反,结合业务情况考虑主表与附属表设计(或后期的垂直拆分)
    3. 水平拆分
    当整个业务都庞大后,考虑部分功能做成服务,单独部署。

    mysql优化
    单表数据量大时,sql语句的优化也尤为重要。处于主角地位的就是索引。在表结构设计是索引必不可少,除非数据量非常少。
    sql语句尽量走索引,索引遵循‘最左前缀‘原则。
    为什么?--索引在mysql innodb就是b-tree。学过二叉树查找的就知道,它是顺序的。
    具体可以参考> http://outofmemory.cn/mysql/mysql-index-arithmetic

    列一下where条件下那些情况走索引,哪些没有(遵循最左前缀匹配原则下):
    - =,in,between…and,like (前缀有模糊不算eg:’abc%’ :yes , ‘%abc%’: no)
    - >, < (范围查询,只能最左边的索引有用eg: a>2 and b>2 ,只会用到a索引)
    - or条件,函数,表达式 都不走索引
    可参考> http://blog.jobbole.com/87107/

    mysql锁机制
    innodb中使用行锁(记录锁)。两种常用事务隔离级别:Repeatable Read(可重复读:不出现幻读):不仅有记录锁,还有间隙锁,锁住可能影响的前后范围纪录。
    Read Committed(读提交:事务处理过程中可能有其它提交,同一select可能返回不同结果,出现幻读):记录锁,锁住当前更改纪录。

    delete,insert,update,特殊的select会加锁。
    曾经碰到出现间隙锁导致死锁情况,需要注意:
    (1)间隙锁只会block住insert操作;
    (2)若where条件走主键索引或唯一索引,不会产生间隙锁;
    (3)若where条件不走索引,则会对所有记录加上X锁(排他锁),并对记录之间应用间隙锁,相当于全表锁

    mysql分表分库
    项目中也有过分表分库,选择了当当网开源中间件sharding-jdbc。
    参考>https://github.com/dangdangdotcom/sharding-jdbc/tree/master
    先收藏关于分表分库原理>http://blog.csdn.net/bluishglc/article/details/6161475/

  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/6366411.html
Copyright © 2011-2022 走看看