sql优化

一、尽可能使用数字型字段数据库

引擎在处理查询会逐个比较字符串中每个字符,而对于数字型而言只须要比较一次就够了;函数

二、尽可能避免使用!=或<>、IS NULL或IS NOT NULL、IN ,NOT IN等这样的操做符.优化

由于这会使系统没法使用索引,而只能直接搜索表中的数据;设计

三、不要习惯性的使用 ‘%L%’这种方式(会致使全表扫描),若是可使用`L%’相对来讲更好;排序

四、能用UNION ALL就不要用UNION索引

UNION ALL不执行SELECT DISTINCT函数,这样就会减小不少没必要要的资源,UNION ALL能够大大加快速度,若是你已经知道你的数据不会包括重复行,或者你不在意是否会出现重复的行,在这两种状况下使用UNION ALL更适合。此外,还能够在应用程序逻辑中采用某些方法避免出现重复的行,这样UNION ALL和UNION返回的结果都是同样的,但UNION ALL不会进行排序。资源

五、避免使用NULL类型:NULL对于大多数数据库都须要特殊处理,MySQL也不例外,它须要更多的代码,更多的检查和特殊的索引逻辑字符串

六、ORDER BY语句的MySQL优化:
a. ORDER BY + LIMIT组合的索引优化。若是一个SQL语句形如:效率

SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];搜索

这个SQL语句优化比较简单,在[sort]这个栏位上创建索引便可。

b. WHERE + ORDER BY + LIMIT组合的索引优化,形如:

SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset],[LIMIT];

这个语句,若是你仍然采用第一个例子中创建索引的方法,虽然能够用到索引,可是效率不高。更高效的方法是创建一个联合索引(columnX,sort)

七、

尽可能早过滤

  这一优化策略其实最多见于索引的优化设计中(将过滤性更好的字段放得更靠前)。

  在 SQL 编写中一样可使用这一原则来优化一些 Join 的 SQL。好比咱们在多个表进行分页数据查询的时候,咱们最好是可以在一个表上先过滤好数据分好页,而后再用分好页的结果集与另外的表 Join,这样能够尽量多的减小没必要要的 IO 操做,大大节省 IO 操做所消耗的时间。

相关文章
相关标签/搜索