在平时开发中,数据库的使用以及优化,也对我们所开发的系统或者平台的性能是一种考验,如何既能够满足需求又能提高sql的性能,值得我们学习,今天就把自己平常遇到的让大家了解一下。
1 当已知where条件的时候,避免在where子句中对子段进行函数操作,如果你的条件是添加了索引,这时搜索引擎会放弃索引而进行去全表扫描,会降低执行效率。
例如:
select * fron user where substring(name,1,4)='abcd' 姓名以abcd开头的人员信息//不建议使用,会 进行全表扫描,放弃name这个索引
select * from user where name like 'abcd%'//建议使用
2 应当尽量避免更新带有索引的数据列,因为索引数据列的顺序就是表记录的物理储存顺序,一旦该列值改变将导致整个表记录的顺序的调整,会消耗相当大的资源,如果某一列经常会被进行更新,需要考虑一下这列是否需要建立索引
3 字段不定长的情况下,尽可能的使用varchar/nvarchar代替char/nchar,因为定长字段,当你字段的长度的不够的的时候,会从右侧进行空格自动进行补位,而变长字段,是你存储多少,实际长度就是字段值的长度加上一个用来记录长度的字节(+1),因为变长字段储存空间小,可以节省储存空间,其次对于查询来说,在一个相对较小的字段内搜索效率会高些.如果是定长的话,例如身份证号码尽可能选择char.
4 select count(*) from user 和select count(id) from user的区别
两者返回的结果是一样的,如果有主键的话 select count(主键) from user 这个时候查询最快。
5 有时候你并不能知道,哪条语句需要优化,顺便说一下mysql慢查询日志的配置
如何开启慢查询日志的查看
首先执行以下sql:
//查看你所配置的慢查询的时间,默认是10s
show variables like 'long_query_time';//默认10s
//查看慢查询配置情况,是否开启慢查询
show status like '%slow_queries%';
//查询慢查询存储日志的路径
show variable like '%slow%'
修改mysql下的my.ini文件配置,需要加上两句话
log-slow_queries="路径"//“D:\log.txt”
long_query_time=5
第一句定义慢查询日志记录的路径,第二句话是定义查询时间用时多少秒算是慢查询
配置成功一下,重启mysql,执行select varlables like '%show%',这时会把满查询开启状态,配置慢查 询时间和日志路径查询出来。根据日志就可以发现你的查询语句用时多长时间,是否需要优化
总结:简单说了一下sql的优化和慢查询日志的配置,哪里说的不清楚或者存在错误,请多多交流指教,共同学习进步。