在Sql中
1,永远给表设置一个主键,最好是整形,且自增.
整型可以是int,或者 bigint, 整型排序快, 自增是为了不破坏已有的数据页,永远往后面插入新数据.
2,如果确定返回只有1条数据,尽量添加 limit 1
limit 1表示查询1条, 即只要有1条满足条件的数据, 就会返回, 不会继续比对其他数据.不会造成全表扫描
3,不要使用order by rand()来进行随机排序
因为rand()特别消耗cpu性能,且是所有行都会执行rand()函数.特别慢.
4.尽量不要写 select *
"*" 表示所有字段, 需要什么字段就写什么字段
5,拆分大的delete和insert (批量删除和批量添加)
批量的删除和批量的添加会造成锁表, 锁表期间,其他操作都停止.影响业务执行.
在数据库中
1,可以创建索引来提高查询性能
索引能提高查询性能, 注意增加,修改,删除会降低性能,所以总是查询建议用索引.
2,越小的存储空间,查询的越快
能用1个字节的,就不用4个字节,能用tinyint的就不用int, 字段越小查询越快.
3,尽可能使用not null
mysql里null也需要占用1个字节的空间
4.条件查询使用预编译而不是字符串拼接
预编译能有效防止SQL注入,在Mybatis里使用#{}, 不用${}
5,把ip地址存储为 unsigned int(无符号整型)
ip如果按照字符串存储,则需要15个字符长度, 即varchar(15), 而转成int只需4个字节
select INET_ATON('191.168.22.65'), INET_NTOA(3215464001)
6,固定长度的表,查询会更快
固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快
7,垂直切割
“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的