数据类型

①尽可能小(占用存储空间少)

Tinyint,smalint,mediumint,int,bigint

varchar(N),varchar(M)

Datetime,timestamp


②尽可能定长

char(定长---最长255)、varchar(变长)

Decimal---->变长,double(float)--->定长


定长:快;变长:精度高


③尽可能使用正数

int(1)与varchar(1)


SQL语句

①在并发性高要求下,少用多表连接,拆分成多次执行(且查询拆分的够小,能增加查询缓存的利用率)

②大量数据插入,先关闭约束与索引再插入

myisam:Alter table table_name disable keys;  //禁用索引约束

---》大量数据插入--》Alter table table_name enable keys;  //启用

Innodb:Drop index,drop constraint;  //保留主键

--》Begin transaction|set autocommit=0;

--》大量数据插入--》Commit---》Add index,add constraint;

数据量少的情况下:insert  into table_name values(),(),(),(),();   //每次插入百条内(每次插入多条)

多次使用insert语句需使用prepare进行预编译,减少编译时间

③limit分页优化

无效检索过大:select table_name from table limit 100000,10;  //这样会跳过很多数据导致无效检索过大

解决方案:获取limit size如下:

select * From customers Where customer_id >=(
select customer_id From customers Order By customer_id limit 10000,1
) limit 10;







④仅查询需要


选取所需字段:select * from table;X


方案如下:select id,name from table;(这才是正确的,* 会造成无用的浪费 )


仅需一条:select username from table limit 1;//仅需一条数据(非分页)可用limit






⑤少用随机函数


每条记录都会执行:Order by Rand();//一旦使用这条随机语句会导致每条语句都会执行


解决方案:使用特定运算获得随机数进行查询