浮点数和定点数
float double real 浮点数
decimal numberic 定点数
1、浮点数存在误差问题
2、对货币等对精度敏感的数据,应该用定点数表示或存储
3、编程中,如果哟用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较
4、浮点数中要做一些特殊的处理
Innodb类型的表,有以下几种方式可以提高导入的效率
a、因为Innodb类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺
序排列,可以有效的提高导入数据的效率。如果Innodb表没有主键,那么系统会默认创
建一个内部列作为主键,所以如果可以给表创建一个主键,将可以利用这个优势提高导
入数据的效率。
b、在导入数据前执行SETUNIQUE_CHECKS = 0 ,关闭唯一性校验,在导入结束后执行
SET UNIQUE_CHECKS = 1,恢复唯一性校验,可以提高导入效率。
优化group by 语句
如果哟查询包括GROUPBY 但你想要避免排序结构的消耗,你可以指定ORDER BY
NULL 禁止排序
SELECT a,COUNT(*) FROM bar GROUP BY a ORDERBY NULL;
优化order by 语句
在很多情况下,Mysql可以使用一个索引来满足OREDERBY 子句
下列sql可以使用索引
select * from t1 order bykey_part1,key_part2............;
select * from t1 where key_part1= 1 order by key_part1 desc,key_part2 desc;
select * from t1 order bykey_part1 desc,key_part2 desc;
优化join语句
查所有没有订单记录的用户取出来
表selesinfo 和customerID建有索引的话 性能会更好一些
SELECT * FROMcustomerinfo LEFT JOIN salesinfoON customerinfo.customerID = salesinfo. CustomerID WHERE salesinfo.customerID IS NULL
Mysql 如何优化or条件
对于or子语句,如果要利用索引,则or之间的每个条件列都必须用到索引;如果没有索引,则应该考虑增加索引
查询优先还是更新优先(insert、update、delete)
1、 写操作优先于读操作
2、 对某张数据表的写入操作魔衣时刻只能发生一次,写入请求按照他们到达的次序来处理
3、 对于某张数据表的多个读取操作可以同时地进行
其他优化措施
1、 使用持久的连接数据库以避免链接开销
2、 经常检查所有查询确实使用了必要的索引
3、 避免在频繁更新上的表执行复杂的select查询,以避免与锁定表有关的由于读、写冲突发生的问题
4、
5、充分利用列有默认值的事实,只有当插入的值不同于默认值时,才明确地插入值,这减少MySQL需要做的语法分析从而提高插入速度
6、对经常访问的可以重构的数据使用内存表,可以显著提高访问的效率
7、
优化数据库对象
我们可以使用 procedureadalyes()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,
SELECT * FROM 9tour_* PROCEDURE ANALYSE();
输出的每列信息都会对数据表中的列的数据类型提出优化建议
SELECT * FROM9tour_* PROCEDURE ANALYSE(16,256);
屏蔽enum类型提出的建议,enum定义通常很难阅读。
通过拆分,提高表的访问效率
选择更合适的表类型
1、 如果出现比较更严重的锁冲突,请考虑是否更改存储引擎到innodb,行锁机制可以有效的减少锁冲突的出现
2、 如果用查询操作很多,且对事物完整性要求不严格,则可以考虑使用Myisam