在SQL中使用now()导致的性能下降(MySQL)
做数据库调优,一个简单的tip就使性能提升一大块时,被帮助的人自然是高兴而且感激,我也是满心欢喜。用所学帮助了他人,也说明还是有一技之长的,有一门能够养活自己的手艺。也算是手艺人啊。
同事让我帮助优化,在slow query log里发现有两个SQL执行的次数最多,并且每次都在两秒以上。用explain看了,也未发现索引使用方面的问题。
最后把怀疑的目光落在了SQL结尾处的>=now()上,now()每次都需要从系统中取,因此可能会导致无法使用query cache。
了解了一下需求,实际这里并不需要当时的时刻,只需要当天的日期就行了。因此建议同事把>=now()改成>=当前日期,而当前日期在程序中取得。
果然,性能大幅提高。
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
以前在安装sql的时候,如此提示,我只要重新启动即可,可是今天重新启动了N次计算机,问题却丝毫没有解决,依然提示这样的话。“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机。” 只好google以下,最终得知是安装程序在先前的安装过程中 ......
1.使用 ESCAPE 关键字定义转义符。 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串 5% 的字符串,请使用: WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
2.ESCAPE 'escape_character' 允许在字符串中搜索通配符而不是将其作为通配符使用。 escape_character 是放在通配符前 ......
SQL*Loader 用于将大量数据装入数据库。
⑴、定宽数据
创建数据文件control.txt:
aaa,bbb
ccc,ddd
eee,fff
创建控制文件control.ctl:
load data
infile 'c:\loader.txt'
append
into table tester.mm(
m1 position(1:3) char,
m2 position(5:7) char)
批量加载数据:
sqlldr tester/test control=c:\loade ......
一、 SQL DMO 描述:SQL Distributed Management Objects(SQL分布式管理对象),存在于SQLDMO.dll文件中,实际上是一个COM 对象,通过调用SQL DMO的ListAvailableSQLServers方法取得。 列表类型:列举装有“客户端”和“服务端”的计算机。 适用条件:装有 SQL Server,且有SQLDMO.dll文件。 速度:中 调用示例:GetS ......