SQL调优小技巧
SQL優化技巧
- 使用group by 分組查詢是,默認分組后,還會排序,可能會降低速度,
在group by 后面增加 order by null 就可以防止排序.
explain select * from emp? group by deptno order by null;
- 有些情況下,可以使用連接來替代子查詢。因為使用join,MySQL不需要在內存中創建臨時表。
select * from dept, emp where dept.deptno=emp.deptno; [簡單處理方式]
select * from dept left join emp on dept.deptno=emp.deptno;? [左外連接,更ok!]
?
?
- 對查詢進行優化,要盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引
應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
最好不要給數據庫留 NULL,盡可能的使用 NOT NULL 填充數據庫.
備注、描述、評論之類的可以設置為 NULL,其他的,最好不要使用 NULL。
不要以為 NULL 不需要空間,比如:char(100) 型,在字段建立時,空間就固定了, 不管是否插入值(NULL 也包含在內),都是占用 100 個字符的空間的,如果是 varchar 這樣的變長字段, null 不占用空間。
可以在 num 上設置默認值 0,確保表中 num 列沒有 null 值,然后這樣查詢:
select id from t where num = 0
總結
- 上一篇: 使用索引注意事项
- 下一篇: 忽略SQL改造等价性