本篇文章主要介绍了"Mysql优化方案二之数据库类型选择及Sql语句优化",主要涉及到Mysql,sql语句方面的内容,对于MySql感兴趣的同学可以参考一下:
数据类型①尽可能小(占用存储空间少)Tinyint,smalint,mediumint,int,bigintvarchar(N),varchar(M)Datet...
数据类型
①尽可能小(占用存储空间少)
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;
参考文章:http://www.cnblogs.com/fanyong/p/3351350.html
④仅查询需要
选取所需字段:select * from table;X
方案如下:select id,name from table;(这才是正确的,* 会造成无用的浪费 )
仅需一条:select username from table limit 1;//仅需一条数据(非分页)可用limit
⑤少用随机函数
每条记录都会执行:Order by Rand();//一旦使用这条随机语句会导致每条语句都会执行
解决方案:使用特定运算获得随机数进行查询
以上就介绍了Mysql优化方案二之数据库类型选择及Sql语句优化,包括了Mysql,sql语句方面的内容,希望对MySql有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_1605227.html