mysql 优化
用join代替子查询,join也尽量少用
join用小的结果集驱动大的结果集,第二个表要建索引,
mysql会用第一张表的每条数据去第二张表中查找
尽量定义成not null,并设置默认值
只有一行数据满足条件,要使用limit 1,找到后就停止
列不要太多,指定需要的列,避免select *
in代替or,in是排序的,复杂度O(lgn),数据是连续的话,用between代替in
当不存在重复数据时,用union all 代替 union,union会排序并去重
不要使用order by rand()
myisam里会记录表的行数,innoDB不会记录,count(*)会比较慢,可以单独用一张表记录行数
where 尽量用相同的类型,避免隐式转换
不用外键和unique,由程序保证约束
尽量不要用字符串做主键
分页:select * from t where ... limit 100000,20 会很慢,需要回表100020次,然后丢弃前100000行
可以 select a.* from t a, (select id from t where ... limit 100000, 20) b where a.id=b.id
只需回表20次
大量导入数据时,先禁用索引和约束,导入完了再一次性创建索引,
innoDB会为每条语句创建事务,比较耗时,可以先手动开启事务,批量导入,然后提交事务
若格式相同,可以预编译
大量删除数据,可以先删除索引,再删数据,然后创建索引
min()、max()在索引上是常数时间
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号