今天在v2ex看到有人问怎么建表,其实建表个人总结起来非常简单。
用面向对象方法建立表
class = table
object = row
property = field
如:(我习惯用单数,你可以用复数)
book:
id
title,
isbn
category:
id
name
book_category:
id
book_id
author_id
处理表关联关系
- A1 对多 B:B 表加 a_id,比如 order_item 表加 order_id
- A1 对 1B:附表加主表 id,比如 profile 表加 user_id
- A 多对多 B:C 表关联 A,B,如 post_tag 表加 post_id 和 tag_id
如何建立索引(全文索引)
- 通常常用的where条件增加索引,如
select id,title from post where forum_id=3
,这时候需要给forum_id加索引,ID是主键是不要加的,title也不要加 - 数据库模糊查询(如搜索“Mysql 数据库”)需要建立全文索引(参考我的另外一篇文章:Mysql中文全文索引(含实例5分钟上手))
- 排序可以加组合索引,如
select id,title from post where forum_id=3 order by create_time desc
,这时候可以加forum_id+create_time
的组合索引,Mysql高版本组合索引可以设置排序 - 组合索引单独查后部分不起作用,如上面的
forum_id+create_time
的组合索引,如果你只根据create_time查那么不起作用 - 唯一字段可以加唯一索引
Mysql性能工具
explain
可以分析sql性能,每个字段的含义都需要清楚slow query log
:Mysql的配置中开启慢速查询日志,慢速查询日志需要用慢查询分析工具来分析,不是用肉眼来看的show full processlist
可以查看当前数据库运行的查询infomation_schema
有一大堆有用东西
其他
null
还是0
:建议采用null
表示没有,这样不会影响数据库的约束