SQL优化问题一般指对查询性能的优化。
建立索引是优化查询速度的重要途径。
Mysql的索引使用BTree(Balance Binary Tree,平衡二叉树。还有二叉树等知识,简单了解)的结构。
索引是把双刃剑,坏处在于占用空间,以及在增删改表时,由于索引也需要维护,增加了数据库的负担。
什么时候适合建立索引呢?
1:在经常需要查询的列上,创建索引加快搜索速度。
2:能用主键去查询,就使用主键去查询。
4:在经常需要排序的列上,建立索引加快排序速度。因为索引是已经排序了的。
5:在经常使用在Where字句中的列上建立索引,加快条件的判断速度。
优化点:
1:对查询进行优化,尽量避免全表扫描。比如:count(*)、like。首先考虑在where以及order by设计到的列上建立索引。
其中,like的全模糊查询:%...%以及左模糊:%...是不使用索引的。而右模糊使用索引:...%。
2:尽量避免在where子句中对字段进行null判断。因为null不会添加到索引中,所以对null进行判断不会使用索引。可以在建表时对于可能为空的列,赋默认值。
3:在where字句中避免使用!=或者<>,它们不走索引,使用全表扫描。
4:尽量避免在where字句中使用or来连接条件。它也不走索引,全表扫描。可以把or换用union all。
比如:select id from t where num = 10 or num = 20 优化为:
select id from t where num = 10 union all select id from t where num = 20;
5:in和not in也要慎用,可能会导致全表扫描。可以使用between and来代替in
6:在where字句中的字段进行表达式的操作,因为字段改变了,不会走索引。比如:
select id from t where num/2=100可以优化为select id from t where num = 100*2
还有很多。使用时具体查阅资料。