对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及 order by 涉及的列上建立索引
尽量不要在where条件中使用函数,否则将不能使用索引
当只要一行数据时使用LIMIT 1
避免使用 select *, 只取需要的字段
采用连接操作,避免过多的子查询,否则产生的CPU和IO开销将会增大
对于连续的数值,使用between代替in
使用union all 操作代替OR操作
尽可能的使用 NOT NULL填充数据库
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了
固定长度的表会更快
如果where中涉及子查询时尽量用exist代替in
在MyISAM存储引擎下count(*) 优于count(col)
更新非常频繁的字段不适合创建索引
不会出现在 WHERE 子句中的字段不该创建索引
较频繁的作为查询条件的字段应该创建索引
对摸个字段进行查询时,尽量用LIKE ‘abc%’ 的形式代替LIKE ‘%abc%’ ,这样索引不会失效
使用 Explain 语句来帮助改进我们的SQL语句