1.表字段避免null值出现,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null。 2.尽量使用INT而非BIGINT,如果非负则加上UNSIGNED(这样数值容量会扩大一倍),当然能使用TINYINT、SMALLINT、MEDIUM_INT更好。 3.使用枚举或整数代替字符串类型 4.尽量使用TIMESTAMP而非DATETIME 5.单表不要有太多字段,建议在20以内 6.用整型来存IP 总结:尽量使用int代替其他数据类型类似String,Date,BigInt 1.索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描 2.应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描 3.值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 4.字符字段只建前缀索引 5.字符字段最好不要做主键 6.不用外键,由程序保证约束 7.尽量不用UNIQUE,由程序保证约束 8.使用多列索引时主意顺序和查询条件保持一致,同时删除不必要的单列索引 简言之就是使用合适的数据类型,选择合适的索引 SQL优化的具体操作: *2、尽量避免使用select ,返回无用的字段会降低查询效率。如下: SELECT * FROM t 优化方式:使用具体的字段代替*,只返回使用到的字段。 3、尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。如下: SELECT * FROM t WHERE id IN (2,3) SELECT * FROM t1 WHERE username IN (SELECT username FROM t2) 优化方式:如果是连续数值,可以用between代替。如下: SELECT * FROM t WHERE id BETWEEN 2 AND 3 如果是子查询,可以用exists代替。如下: SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username) 4、尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描。如下: SELECT * FROM t WHERE id = 1 OR id = 3 优化方式:可以用union代替or。如下: SELECT * FROM t WHERE id = 1 (PS:如果or两边的字段是同一个,如例子中这样。貌似两种方式效率差不多,即使union扫描的是索引,or扫描的是全表) 5、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下: SELECT * FROM t WHERE username LIKE ‘%li%’ 优化方式:尽量在字段后面使用模糊查询。如下: SELECT * FROM t WHERE username LIKE ‘li%’ 6、尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。如下: SELECT * FROM t WHERE score IS NULL 优化方式:可以给字段添加默认值0,对0值进行判断。如下: SELECT * FROM t WHERE score = 0 **7、尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。**如下: SELECT * FROM t2 WHERE score/10 = 9 SELECT * FROM t2 WHERE SUBSTR(username,1,2) = ‘li’ 优化方式:可以将表达式、函数操作移动到等号右侧。如下: SELECT * FROM t2 WHERE score = 10*9 SELECT * FROM t2 WHERE username LIKE ‘li%’ 8、当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。如下: SELECT * FROM t WHERE 1=1 优化方式:用代码拼装sql时进行判断,没where加where,有where加and。 sql优化一般步骤概要: 1.通过 show status 命令了解各种sql的执行频率
优化成本:硬件>系统配置>数据库表结构>SQL 及索引。
优化效果:硬件<系统配置<数据库表结构1.1 设计表时要注意:
1.2 索引
1.3 sql的编写需要注意优化
1、在表中建立索引,优先考虑where、group by使用到的字段。
UNION
SELECT * FROM t WHERE id = 32.sql优化的一般步骤
2.定位执行效率较低的sql语句
3.通过explain分析低效sql的执行计划
4.通过 show profile 分析sql
5.通过trace分析 优化器 如何选择执行计划
6.确定问题并采取相应的优化措施