SQL备注

一、顺序

SQL语句的顺序不是解析的顺序,实际为

FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT 
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>

二、语句

  1. 尽量不使用SELECT *
  2. 统计使用SELECT COUNT(*)
  3. 尽量不使用内置函数,不对字段进行计算
  4. 减少JOIN,适当字段冗余
  5. 适当使用UNION代替OR条件查询
  6. WHERE条件须使用到索引,符合左前缀
  7. WHERE条件为非索引查找一条数据时应使用LIMIT 1避免找到一条后继续查找
  8. AND除索引外的条件,筛选力度大的优先(优化器会自动优化,但是你应该知道)
  9. LIKE模糊查询注意符合左前缀
  10. IN后数组不宜过大,注意使用EXISTS代替
  11. ORDER BY适当建立联合索引,注意SELECT字段不使用索引问题
  12. 注意OFFSET过大效率低问题
  13. 多使用EXPLAIN才是关键

三、表

  1. 表名必须使用单数小写加下划线形式
  2. 对于布尔型字段命名is_,has_,can_等,unsigned tinyint,0否1是
  3. InnoDB中推荐varchar代替char 引文 (但是固定表效率更高?)
  4. 小数使用decimal存储,doublefloat会精度丢失
  5. text类型应单独建立表分离出来
  6. 主键索引名pk_,唯一索引名uk_,普通索引名idx_
  7. 具有唯一性字段必须建立唯一索引
  8. 字符型索引的建立一般没必要全长度索引
  9. 字段名不该使用desc,range等保留字
  10. 字段尽量not null
  11. 应该写属性comment
  12. 实际应用中不使用外键.
  13. 一张表只能有一个AUTO_IN CREMENT字段且该字段必须为KEY

四、配置

  1. max_connections最大连接数。1
  2. back_log超过最大连接数存放在堆栈中的等待数
  3. wait-timeout连接闲置最大时间值
  4. thread_concurrency应设为CPU核数的2倍,cup数*核数*2
  5. skip-name-resolve禁用DNS解析
  6. key_buffer_size索引块的缓冲区大小
  7. innodb_buffer_pool_size针对InnoDB的参数
  8. sort_buffer_size排序缓冲区大小
  9. set global slow_query_log=1;开启慢查询日志

  1. ↩︎
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值