1:对查询进行优化,尽可能的避免全表扫描
在where 和order by对应的列上建立索引
2.1: 减少where 字段值null判断
SELECT * FROM m_user where type = null
如何这样做,就会导致引擎放弃使用索引而进行全表扫描
应该这样去设置(也就是在没有值时,我们在存数据库时自动默认给个o值,而不是什么都不写):
SELECT * FROM m_user where type = 0
2.2 应尽量避免在 where 子句中使用!=或<>操作符
2.3 应尽量避免在 where 子句中使用 or 来连接条件
-
SELECT * FROM "tb_real_time_car" where pay_status != null or enter_time = null;
这样将导致引擎放弃使用索引而进行全表扫描
可以这样操作:
SELECT * FROM "tb_real_time_car" where pay_status != null union all
SELECT * FROM "tb_real_time_car" where enter_time = null;
2.4 in 和 not in 也要慎用
SELECT * FROM "tb_real_time_car" where rowed in [1,2,3,4]; 替换为SELECT * FROM "tb_real_time_car" where rowed between 1 and 5;
2.5 少使用模糊匹配 like
2.6 应尽量避免在 where 子句中对字段进行表达式操作
SELECT * FROM "tb_real_time_car" where rowid/4 =100; 替换为 SELECT * FROM "tb_real_time_car" where rowid =4*100;
2.7不要在条件判断时进行 算数运算
2.8很多时候用 exists 代替 in 是一个好的选择
SELECT * FROM "tb_real_time_car" where rowed (select rowed from "tb_real"); 替换为SELECT * FROM "tb_real_time_car" where exists (select rowed from "tb_real" where rowed = tb_real.rowid)