-
表的字段不要太多,上限20-50
-
数据库不做运算
-
控制单表数据量 含char 不超过500 w
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18use information_schema; 该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引擎 TABLES_ROWS:记录数 DATA_LENGTH:数据大小 INDEX_LENGTH:索引大小 # 查看指定库的大小 select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='jishi'; # 查看指定库的指定表的大小 select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES where table_schema='jishi' and table_name='a_ya'; # 查看指定库的指定表的索引大小 SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 2), ' MB') AS 'Total Index Size' FROM TABLES WHERE table_schema = 'test' and table_name='a_yuser'; -
拒绝3B
- 大sql
- 大事务
- 大批量
-
用好数据类型:确定好数据的最大范围,之后定义数据的位数。
有的只是标志位的话,就可以使用tinyint(1) 来表示
-
可以用无符号int 来存储ip
-
避免使用null 字段, 数据库表中的列最好设置初始值,或者设置成NOT NULL
-
少用text 字段,效率很慢,强制生成临时表,消耗空间。varchar(65535) > 64k
使用时可以拆分成独立的表
-
尽量不使用外键
-
字符字段必须建立前缀索引
-
忌用字符串做主键
-
使用自增字段作为主键
-
多sql ,而不是大sql
-
事务/连接原则:即开即用,用完即关;多个短事务代替长事务
-
尽量不要使用 select * .会查询所有列,之后丢弃不需要的列
-
使用union 来代替or
-
避免负向查询【NOT LIke】,前缀模糊查询 【%,这个尽量放在查询参数的后半段】:
-
count(*) 开销巨大,能不用就不用
-
union all 来代替 union , union 有去重,如果不关心有重复的字段时可以使用union all
-
不建议进行两个表以上的join
-
Group by NULL无需排序,性能会好一点
-
统一使用字符集UTF8 ,校对规则: utf8_general_ci
-
索引名称默认 idx_