优化方案:
- 优化MySQL查询缓存,进行一些配置
-
数据库优化
- 数字类型
- Float和double选择(尽量选择float)
- 区分开TINYINT / INT / BIGINT,能确定不会使用负数的字段,建议添加 unsigned定义
-
能够用数字类型的字段尽量选择数字类型而不用字符串类型的
-
字符类型
-
char,varchar,TEXT的选择:非万不得已不要使用 TEXT 数据类型,定长字段,建议使用 CHAR 类型(填空格),不定长字段尽量使用 VARCHAR(自动适应长度,超过阶段),且仅仅设定适当的最大长度
-
-
时间类型
-
按选择优先级排序DATE(精确到天)、TIMESTAMP、DATETIME(精确到时间)
-
-
ENUM
-
对于状态字段,可以尝试使用 ENUM 来存放
-
-
避免使用NULL字段,很难查询优化且占用额外索引空间
- 数字类型
-
Sql优化
- 查询只返回需要的数据,不用写 select * from
- 尽量少做重复的工作,可以使用联合union 和union all,但是union all 优于union
- 适当建立索引
- 使用join代替子查询
- 使用union代替手动创建临时表
-
索引优化:
-
创建索引,以下情况不适合建立索引表记录太少
- 经常插入、删除、修改的表
- 数据重复且分布平均的表字段
- 表记录太少
- 复合索引:如果一个表中的数据在查询时有多个字段总是同时出现则这些字段就可以作为复合索引
- 索引尽量少用,如果某个查询或者排序的字段里面的值的类型(例如:订单表的状态字段)很少的话(行数少),可以不加索引
- 如果ABC加联合索引的话,查询单个的比如where A 或者B或者C不会走索引,其他混合的情况比如BC AB AC等情况会走索引
-
-
事务
- 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
-
以下几点会进行全表扫描
-
左模糊查询’%...’
b) 使用了不等操作符!=
c) Or使用不当,or两边都必须有索引才行
d) In 、not in
e) Where子句对字段进行表达式操作
f) 对于创建的复合索引(从最左边开始组合),查询条件用到的列必须从左边开始不能间隔。否则无效,复合索引的结构与电话簿类似
g) 全文索引:当于对文件建立了一个以词库为目录的索引(文件大全文索引比模糊匹配效果好)
能在char、varchar、text类型的列上面创建全文索引
-