一、使用索引
无需一开始就扫描整个表,添加必要的索引由此显著地加快查询速度。
二、尽量避免使用select *,返回无用的字段会降低查询效率
三、尽量避免使用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)
四、使用连接(JOIN)来代替子查询(Sub-Queries)
是因为MySQL不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作。
五、使用联合(UNION)来代替手动创建的临时表
六、优化的查询语句
首先,最好是在相同类型的字段间进行比较的操作。
其次,在建有索引的字段上尽量不要使用函数进行操作。
第三,在搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的。
最后,应该注意避免在查询中让MySQL进行自动类型转换,因为转换过程也会使索引变得不起作用。