sql性能优化
1、当x越来越大时,因为会查询出x跳记录然后过滤出需要的y条,查询效率会显著降低,为此,有几下集中解决方案:
1先查出上一页结束的数据记录:
SELECT * FROM table WHERE id>= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10`
2.如果id是连续的,建议使用between
SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;
3.还有一种,可以在查询下一页时把上一页的行id作为参数传递给客户端程序,然后sql就改成了
select * from table where id>3000000 limit 10;
2、对查询优化,应尽量避免全表扫描,首先应考虑在where order by列上建立索引。
3、不使用NULL,使用默认值类似于0
4、where子句中避免使用!=或<>、IN、LIKE 操作符
5、少使用or (可能会造成不走索引) 可以换成 union 连接语句 :select id from t where num=10 union all select id from t where num=20。
6、 能用between 就不用 in
7、where尽量不放表达式和函数
8、exists可以替代in 和 count
9、数值类型会比字符串类型 查询和连接的性能上快,存储开销小。
10、 varchar/nvarchar 和 char/nchar 可变长字段存储空间小,可以节省存储空间
11、不用用*,使用点出字段的方式,这样就不会多一层转换
12、使用链表查询时,请使用别名,这样会少一层转换,以及不会让各表的字段出现争议。
13、临时表可以在合适的场合使用
14、可以将数据处理放在服务器上,服务器的内存也可以考虑,这样会大大增加性能
15、能使用批量插入、批量修改(不造成问题的情况下),就使用
16、sql语句字段能大写就大写,因为数据库最后是会转换为大写的
17、事物时间尽量缩小,避免死锁
18、MySQL高速查询缓存
19、EXPLAIN 可以查看 语句使用索引的程度
20、任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边,这样不会让索引失效.