mysql语句优化

Mysql语句优化sql

一、使用select语句尽可能多用字段,使用 * 效率更低。由于使用 * ,数据库还要去查询数据字典,而后解析列名,直接写列名会提升效率。数据库

select * from user;
要写成
select userID,userName,userSalary from user;

二、 查询数量,select(*)会有一个展开的过程,建议用字段,可是count(*)不会直接展开,直接就是扫描,查询数量,而count(1)还要找到对应的字段因此效率就低了。函数

三、 查询一条语句,尽可能在后面加上“limit1”(数据库查询到一条即中止)。优化

四、快速插入语句: 例如:spa

insert into user(name) values(‘m’); insert into user(name) values(‘n’);
改成,
insert into user(name) values(‘m’), (‘n’);

SQL语句优化遵循原则
一、尽可能避免在列上运算,这样会致使索引失效。code

二、使用 JOIN 时,应该用小结果集驱动大结果集,同时把复杂的 JOIN 查询拆分红多个query,由于JOIN 多个表,可能致使更多的锁定和堵塞。blog

三、使用LIKE 时,避免使用 %%。排序

四、select 指定查询字段,不要全查出来,节省内存。索引

五、使用批量插入语句节省交互。内存

六、limit的基数比较大时,使用 between,between 限定比 limit 快,可是between也有缺陷,若是id中间有断行或是中间部分id不读取的状况,数据会少。
例如:

select * from t where 1 limit 100000,10 ;
可改成:
select * from twhere id between 100000 and 100010

七、不要使用rand 函数取多条随机记录。

八、避免使用 NULL。

九、不要作无谓的排序操做,而应尽量在索引中完成排序。

十、删除全部记录的时候,用truncate 替代 delete,由于 delete 删除记录时,会扫描整个表,而后再一条一条删除,而 truncate table user; 是一次性删除整个表的全部内容,会提升效率。

十一、尽可能多使用commit,由于 commit 会释放回滚点 callback。

十二、用 where 子句替换 having 子句,where 先执行,having 后执行。由于 having 会先分组,比较占内存。

1三、多使用内部函数提升SQL效率,例如多使用concat链接,代替‘||’的符号链接。

1四、表名过长时,尽可能使用表的别名,由于长表名更加的耗费扫描时间。

1五、使用列的别名,一样地,长列名也会耗费扫描时间。

1六、两者都能使用尽可能使用where(与having比较):where先过滤(数据就少了)再分组 。

1七、例:

select a.*, b.* 
from a,b 
where a.id=b.a_id;

 注意from后面的表名,
  (1).若是多表查询是彻底无关系的话,将记录和列名最少的表写在最后,而后依次类推
  (2).若是多表查询是有关系的话,将引用最多的表放在最后,而后依次类推,这样速度会有所提升。
1八、where子句中的链接顺序(where也采用从右往左解析):

当使用where子句链接的时候,要将能够过滤掉最大数量记录的条件写在where子句的最右边,这样,能够过滤掉大量数据后,再执行其余条件,能够提升效率。

 


SQL优化持续更新中。。

相关文章
相关标签/搜索