[MySQL优化] -- 如何查找SQL效率地下的原因
时间:2010-2-28来源:HaCMS开源社区 作者:chusong
查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( s ...
查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( sum )操作,相应 SQL 的执行计划如下:
mysql> explain select sum(profit) from sales a,company b where a.company_id = b.id and a.year = 2006\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 12
......
[MySQL优化] -- 如何查找SQL效率地下的原因
时间:2010-2-28来源:HaCMS开源社区 作者:chusong
查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( s ...
查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( sum )操作,相应 SQL 的执行计划如下:
mysql> explain select sum(profit) from sales a,company b where a.company_id = b.id and a.year = 2006\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: a
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 12
......
转至http://mbtk.blog.sohu.com/150003773.html ,并补充一些相关知识。
DBCC ErrorLog :如果很少重起mssqlserver服务,那么服务器的日志会增长得很快,而且打开和查看日志的速度也会很慢。使用这个命令,可以截断当前的服务器日志,主要是生成一个新的日志。可以考虑设置一个调度任务,每周执行这个命令自动截断服务器日志。使用存储过程sp_cycle_errorlog也可以达到同样的目的。
默认情况下,SQL Server 保存 7 个 ErrorLog 文件,名为:
ErrorLog
ErrorLog.1
ErrorLog.2
ErrorLog.3
ErrorLog.4
ErrorLog.5
ErrorLog.6
在 APACS OS 版本 6.1 中,ErrorLog 文件保存在 c:\Program Files\Microsoft SQL Server\MSSQL$WINCC\LOG 文件夹中。
在 APACS OS 版本 7.0 中,ErrorLog 文件保存在 c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG 文件夹中。
ErrorLog 文件包含最新信息;ErrorLog.6 文件包含最老的信息。每次重启动 SQL Server 时,这些日志文件都如下循环:
删除 ErrorLog.6 文件中的所有数据,并创建一个新的 ErrorLog 文件。
上个 ErrorLog 文件中的所有数据被写入到 ErrorLog.1 文件中。
上个 ErrorLog.1 ......
[MySQL优化] -- 如何了解SQL的执行频率
时间:2010-2-28来源:HaCMS开源社区 作者:chuxu
MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息。 show [session|global] status 可以根据需要加上参数“ session ”或者“ global ”来显示 session ...
MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息。
show [session|global] status 可以根据需要加上参数“ session ”或者“ global ”来显示 session 级(当前连接)的统计结果和 global 级(自数据库上次启动至今)的统计结果。如果不写,默认使用参数是“ session ”。
Com_xxx 表示每个 xxx 语句执行的次数,我们通常比较关心的是以下几个统计参数 :
Com_delete :执行 DELETE 操作的次数。
知道了这些信息就方便我们确定我们到底需要什么样的存储引擎了,一般来说 ......
[MySQL优化] -- 如何了解SQL的执行频率
时间:2010-2-28来源:HaCMS开源社区 作者:chuxu
MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息。 show [session|global] status 可以根据需要加上参数“ session ”或者“ global ”来显示 session ...
MySQL 客户端连接成功后,通过 show [session|global]status 命令 可以提供服务器状态信息,也可以在操作系统上使用 mysqladmin extended-status 命令获得这些消息。
show [session|global] status 可以根据需要加上参数“ session ”或者“ global ”来显示 session 级(当前连接)的统计结果和 global 级(自数据库上次启动至今)的统计结果。如果不写,默认使用参数是“ session ”。
Com_xxx 表示每个 xxx 语句执行的次数,我们通常比较关心的是以下几个统计参数 :
Com_delete :执行 DELETE 操作的次数。
知道了这些信息就方便我们确定我们到底需要什么样的存储引擎了,一般来说 ......
--select name from sysobjects where type='U' order by name
SELECT
(case when a.colorder=1 then d.name else '' end) 表名,
-- a.colorder 字段序号,
a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,
(case when (SELECT count(*)
from sysobjects
WHERE (name in (SELECT name
from sysindexes
WHERE (id = a.id) AND (indid in (SELECT indid
from sysindexkeys
WHERE (id = a.id) AND (colid in (SELECT colid
from syscolumns
WHERE (id = a.id) AND (name = a.name)
......
新建表:
create table [表名]
(
[自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default '默认值' null ,
[字段2] ntext null ,
[字段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null ,
)
删除表:
Drop table [表名]
插入数据:
INSERT INTO [表名] (字段1,字段2) VALUES (100,'51WINDOWS.NET')
删除数据:
DELETE from [表名] WHERE [字段名]>100
更新数据:
UPDATE [表名] SET [字段1] = 200,[字段2] = '51WINDOWS.NET' WHERE [字段三] = 'HAIWA'
新增字段:
ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL
删除字段:
ALTER TABLE [表名] DROP COLUMN [字段名]
修改字段:
ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL
重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)
sp_rename '表名', '新表名', 'OBJECT'
新建约束:
ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] <= '2000-1-1')
删除约束:
ALTER TABLE [表名] DROP CONSTRAINT 约束名
新建默认值
ALTER TABLE [表名] ......
定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)
我为什么要使用触发器?比如,这么两个表:
Create Table Student( --学生表
StudentID int primary key, --学号
....
)
Create Table BorrowRecord( --学生借书记录表
BorrowRecord int identity(1, ......