1、表中应该避免可为空的列。
虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候,需要进行特殊的处理。
如此的话,就会增加数据库处理记录的复杂性。当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。
2、表不应该有重复的值或者列。
3、表中记录应该有一个唯一的标识符。
4、数据库对象要有统一的前缀名。
5、尽量只存储单一实体类型的数据。
性能优化
1、把你表中经常查询的和不常用的分开几个表,也就是横向切分
2、把不同类型的分成几个表,纵向切分
3、常用联接和查询条件列的建索引
4、服务器放几个硬盘,把数据、日志、索引分盘存放,这样可以提高IO吞吐率
5、用优化器,优化你的查询
6、考虑冗余,这样可以减少连接
7、维护索引 你在将索引建好后,定期维护是很重要的。
如何找出不必要的索引
可以通过information_schema的STATISTICS表找出类似的索引,然后再经过人工过滤,应该还有更好的办法,
比如如下查询,能查询出制定库的辨识度低的列索引:
SELECT TABLE_NAME,INDEX_NAME,COLUMN_NAME,CARDINALITY FROM `information_schema`.`STATISTICS` WHERE TABLE_SCHEMA='databasename' AND CARDINALITY<=5;
Cardinality:索引中唯一值的数目的估计值。如果非常小,那用户需要考虑是否还有必要创建这个索引。
如何找出必须的索引
A. 找出性能差或者没有使用到索引的SQL语句
要找出性能差或者没有使用到索引的SQL语句,需要做一些设置,比如将long_query_time设置成0.2秒左右,这个根据自己的环境来定,
打开log_queries_not_using_indexes参数,可以通过set global log_queries_not_using_indexes=on;命令打开。
可以通过mysqldumpslow命令来对慢查询日志进行统计,比如按照执行时间长短来提取或者按照执行次数来提取或者查询记录数来提取。
列举两个非常常用的组合:
mysqldumpslow -s t -t 10 slow.log #找出10条消耗时间最长的慢查询SQL
mysqldumpslow -s c -t 10 slow.log #找出10条执行次数最多的满查询SQ
B. 通过explain和profiling分析性能差和没有用到索引的sql。