1.Max的优化
如果没有索引,max需要检索所有行才能得出结果,这里可以通过建立索引的方式进行优化:
CREATE INDEX idx on products(price); 在products表中对price建立索引
这样,再查询price的最大值就能迅速得出结果。
2.子查询的优化
下列子查询:
SELECT id, name, price FROM products WHERE products.id IN (SELECT prod_id FROM vendors);
可以用join方法进行优化:
SELECT id, name, price FROM products INNER JOIN vendors ON products.id = vendors.prod_id;
但是,如果vendors中含有重复的prod_id,则会返回重复的查询结果。因此,需要增加distinct关键字。
3.Limit的优化
避免使用LIMIT 500, 5等语句,因为会查询505行。当主键(例如id)顺序增加时,可以按照主键排序,并限定为id>500且<=505,这样会只查询出需要的5行结果。
4.水平拆分与垂直拆分
水平拆分是指将数据按照某些字段分成几个结构相同的表进行存储,从而提高查找效率。垂直拆分是指将表的几列拆分出来形成新表,避免表的列数过多。