‘壹’ 谁有DOS下管理数据库的命令,MySQL,MSSQL,Oracle,sql2005都行
给你mysql的吧 一、连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。 (注:u与root可以不用加空格,其它也一样) 3、退出MYSQL命令: exit (回车)。 二、修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 三、增加新用春粗户。(注意:和上面不同,下面的因为是MySQL环境中的命令,所以后面都带一个分号作为命令结束符) 格式:grant select on 数据库.* to 用户名@登录主键森消机 identified by \"密码\" grant select,insert,update, delete on *.* to test2@localhost identified by \"abc\"; 如果你不想test2有密码,可以再打一个命令将密码消掉。 grant select,insert,update,delete on mydb .* to test2@localhost identified by \"\"; 在上面讲了登录、增稿知加用户、密码更改等问题。下面我们来看看MySQL中有关数据库方面的操作。注意:你必须首先登录到MySQL中,以下操作都是在MySQL的提示符下进行的,而且每个命令以分号结束。 1、MySQL常用命令 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 表的详细描述 select 中加上distinct去除重复字段 mysqladmin drop database name 删除数据库前,有提示。 显示当前mysql版本和当前日期 select version(),current_date; 2、修改mysql中root的密码: shell>mysql -u root -p mysql> update user set password=password(”xueok654123″) where user=’root’; mysql> flush privileges //刷新数据库 mysql>use dbname; 打开数据库: mysql>show databases; 显示所有数据库 mysql>show tables; 显示数据库mysql中所有的表:先use mysql;然后 mysql>describe user; 显示表mysql数据库中user表的列信息); 3、grant 创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个 mysql> grant all privileges on *.* to user@localhost identified by ’something’ with 增加新用户 格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码” GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ’something’ WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ’something’ WITH GRANT OPTION; 删除授权: mysql> revoke all privileges on *.* from root@”%”; mysql> delete from user where user=”root” and host=”%”; mysql> flush privileges; 创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb mysql >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ‘ passwd’ 重命名表: mysql > alter table t1 rename t2; 4、mysqlmp 备份数据库 shell> mysqlmp -h host -u root -p dbname >dbname_backup.sql 恢复数据库 shell> mysqladmin -h myhost -u root -p create dbname shell> mysqlmp -h host -u root -p dbname < dbname_backup.sql 如果只想卸出建表指令,则命令如下: shell> mysqladmin -u root -p -d databasename > a.sql 如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下: shell> mysqladmin -u root -p -t databasename > a.sql 那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢? mysqlmp -T./ phptest driver 其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与mysqlmp同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。 5、可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查 询,可如下执行这些查询: 例如,如果您想将建表语句提前写在sql.txt中: mysql > mysql -h myhost -u root -p database < sql.txt
‘贰’ 数据库的命令都有哪些
1、显示当前存在的数据库 mysql> show databases;
2、选择数据库 mysql> USE mysql Database changed (USE 和 QUIT 命令不需要分号结束。),显示当前选择的数据库 mysql> select database();
3、显示当前数据库中存在的表 mysql> SHOW TABLES;
4、显示表(db)的内容 mysql>select * from db;
5、命令的取消 当命令输入错误而又无法改变(多行语句情形)时,只要在分号出现前就可以用 c来取消该条命令 mysql> select -> user() -> c
6、创建一个数据库abccs mysql> CREATE DATABASE abccs;
7、选择你所创建的数据库 mysql> USE abccs Database changed;
8、创建一个数据库表 首先看现在你的数据库中存在什么表: mysql> SHOW TABLES; Empty set (0.00 sec) 说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable: 我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), birth DATE, birthaddr VARCHAR(20));
9、显示表的结构: mysql> DESCRIBE mytable;
10、 往表中加入记录 我们先用SELECT命令来查看表中的数据: mysql> select * from mytable; Empty set (0.00 sec) 这说明刚才创建的表还没有记录。 加入一条新记录: mysql> insert into mytable values ('abccs','f','1977-07-07','china');
11、用文本方式将数据装入一个数据库表 如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。 创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在 CREATE TABLE语句中列出的列次序给出,例如: abccs f 1977-07-07 china mary f 1978-12-12 usa tom m 1970-09-02 usa 使用下面命令将文本文件“mytable.txt”装载到mytable表中: mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet; 再使用如下命令看看是否已将数据输入到数据库表中: mysql> select * from mytable;
12、从数据库表中检索信息 select语句格式一般为: SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件
13、查询所有数据: mysql> select * from mytable;
14、修正错误记录: 假如tom的出生日期有错误,应该是1973-09-02,则可以用update语句来修正: mysql> update mytable set birth = "1973-09-02" where name = "tom";
15、 选择特定列 假如你想查看表中的所有人的姓名,则可以这样操作: mysql> SELECT name FROM mytable; 如果想列出姓名和性别两列,则可以用逗号将关键词name和birth分开: myaql> select name,birth from mytable;
16、对行进行排序 我们可以对表中的记录按生日大小进行排序: mysql> SELECT name, birth FROM mytable ORDER BY birth; 我们可以用DESC来进行逆序排序: mysql> SELECT name, birth FROM mytable ORDER BY birth DESC;
17、 行计数 数据库经常要统计一些数据,如表中员工的数目,我们就要用到行计数函数COUNT()。 COUNT()函数用于对非NULL结果的记录进行计数: mysql> SELECT COUNT(*) FROM mytable; 员工中男女数量: mysql> SELECT sex, COUNT(*) FROM mytable GROUP BY sex;
18、多表查询 现在我们有了两个表: mytable 和 title。利用这两个表我们可以进行组合查询: 例如我们要查询作者abccs的姓名、性别、文章: mysql> SELECT name,sex,title FROM mytable,title WHERE name=writer AND name='abccs'; 用于查询文章a2的作者、出生地和出生日期: mysql> select title,writer,birthaddr,birth from mytable,title -> where mytable.name=title.writer and title='a2';
19、增加一列: 如在前面例子中的mytable表中增加一列表示是否单身single: mysql> alter table mytable add column single char(1);
20、修改记录 将abccs的single记录修改为“y”: mysql> update mytable set single='y' where name='abccs';
21、增加记录 前面已经讲过如何增加一条记录,为便于查看,重复与此: mysql> insert into mytable values ('abc','f','1966-08-17','china','n');
22、删除记录 用如下命令删除表中的一条记录: mysql> delete from mytable where name='abc'; DELETE从表中删除满足由where给出的条件的一条记录。
23、删除表: mysql> drop table ****(表1的名字),***表2的名字; 可以删除一个或多个表,小心使用。
24、数据库的删除: mysql> drop database
‘叁’ MySQL数据库备份和还原的常用命令
1.备份MySQL数据库的命令
mysqlmp-hhostname-uusername-ppassworddatabasename>backupfile.sql
2.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqlmp-_add-drop-table-uusername-ppassworddatabasename>backupfile.sql
3.直接将MySQL数据库压缩备份
mysqlmp-hhostname-uusername-ppassworddatabasename|gzip>backupfile.sql.gz
4.备份MySQL数据库某个(些)表
mysqlmp-hhostname-uusername-ppassworddatabasenamespecific_table1specific_table2>backupfile.sql
5.同时备份多个MySQL数据库
mysqlmp-hhostname-uusername-ppassword_>multibackupfile.sql
6.仅仅备份灶此数据库结构
mysqlmp_no-data_>structurebackupfile.sql
7.备份服务器上所有数据库
mysqlmp_all-databases>allbackupfile.sql
8.还原MySQL数据库的命令
mysql-hhostname-uusername-ppassworddatabasename<backupfile.sql
9.还隐碰迅原压缩的MySQL数据库
gunzip<backupfile.sql.gz|mysql-uusername-ppassworddatabasename
10.将数据库转移到新服吵缺务器
mysqlmp-uusername-ppassworddatabasename|mysql_host=*.*.*.*-Cdatabasename
‘肆’ 数据库命令
1.select 工号,部门,婚否,工资补贴,公积金,应发工资 from pay where 工作日期>'2000-00-00'
2.问题不清楚,可以使用union联合或者在一个语句中通过对同一个表进行子查询然后对子查询的结果进行再次查询
3.select 姓名,工作时间,工资,性别 from pay order by 性别 desc
第三问性别是只有两种可能,所以还可以通过select 姓名,工作时间,工资,性别 from pay group by 性别
在选取数据的时候一定要加上性别,至于显示的时候,可以不让它显示
‘伍’ 关于 数据库查询命令
1.select * FROM A where 列名 <>0
--<>标示不等于
2.--NOT in
select * FROM A where 列名 NOT in(0)
--这样是用索引的 不用担心。
3.--子查询 WHERE
SELECT * FROM A WHERE A NOT IN (SELECT 列名FROM A WHERE A ='1')
‘陆’ MYSQL数据库命令
一个语句操作的话比较麻烦,你可以用PHP分源乎腊成多布顷亏来完成,思路就是把两条记录读取出来分雹滑别放在一个数组中,再构建两条 Update SQL语句替换。
‘柒’ SQL Server数据库常用命令(建议收藏)
命令:create database 数据库名;
示例:create database student;
命令:drop database 数据库名;
示例:drop databasestudent;
命令:create table 表名
(列名数据类型,列名2.....)
示例:create table student
(snamechar(20),sidint)
命令:drop table 表名
示例:drop table student
(插入(新增)列)
命令:alter table 表名
add 新列名数据类型
示例:alter table student
addsageint
(删除列)
命令:alter table 表名
drop column 列名
示例:alter table student
drop column sid
(修改列类型)
命令:alter table 表名
altercolumn 列名数据类型
示例:alter table student
altercolumnsidfloat(浮点型)
(新增约束)
命令:alter table 表名
alter column 列名新数据类型
示例:alter table student
alter column PK_sidprimarykey(sid)(新增的约束类型是主键约束)
(删除约束)
命令:alter table 表名
drop列名
示例:alter table student
drop PK_sid
命令:select要查询的数据列名
from 表名
where筛选条件(无法对分组后的数据进行筛选)
(高级搜索)【groupby 列名(分组)
having筛选条件(只能对分组后的数据进行筛选)
order by排序方式(控制数据最后输出的排列方式有正序:asc、倒叙:desc)】
示例:selectsid
from student
wheresid=2
【group by sid
havingsid=1
order by desc】
命令:insertinto表名
(列名 ,列名)
values
(值,值)
示例:insertinto表名
(sname,sid,sage)
values
(‘张三’,12,15)
命令:update from 表名
set 列名=新值
示例:update from student
set sname='李四'
命令:insert into 表名(值的总数必须和列的总数相同)
select值,值,值union all
selevt值,值,值
示例:insertinto表名
select'张三',15,18
select'李四',16,19
命令:create view 视图名
as
select 列
from 表名
示例:create view students
as
select sname
from student
‘捌’ 如何使用mysql命令行
1、首唤塌先第一步就是我们要先连接数据库,只有先连接了数据库,才祥手可以对数据库进行操作。首先打开一个cmd窗口。
2、在cmd命令行里输入mysql-uroot-proot-h127.0.0.1,这样就可以连接了。我们来看一下连接的结果。
3、使用showdatabases;这个命令可以显示出所有的database表以方便我们查看。
4、使用use数据库名就可以进入我们的数据库了。成功的话就会显示Databasechanged。
5、当我们使用showtables就可以显示出当前数据库里全部的表格了,这个时候我们就可以对这些表进行别的操作了。
6、使用select*from表名,就可以查看整张表格里的所有的信息,比如说我们打开的是users,所以里面会有用户名和密码的内容。
MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗谨链嫌下公司。MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(,关系数据库管理系统)应用软件之一。
MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
‘玖’ 计算机二级vfp数据库常用命令有哪些
数据库文件及记录命令
ADD TABLE 在当前数据库中添加一个自由表
APPEND 在表的末尾添加一个或多个新记录
APPEND FROM ARRAY 由数组添加记录到表中
APPEND FROM 从一个文件中读入记录,追加到当前表的尾部
APPEND GENERAL 从文件中导入OLE对象并将其放入通用字段中
APPEND MEMO 将文本文件的内容复制到备注字段中
APPEND PROCEDURES 将文本文件中的存储过程追加到当前数据库中
AVERAGE 计算数值表达式或字段的算术平均值
BLANK 清除当前记录中所有字段的数据
BROWSE 打开浏览窗口,显示当前或选定表的记录
CALCULATE 对表中的字段或包含字段的表达式进行财务和统计操作
CHANGE 显示要编辑的字段
CLOSE 关闭各种类型的文件
CLOSE MEMO 关闭一个或多个备注编辑窗口
COMPILE DATABASE 编译数据库中的存储过程
CONTINUE 继续执行先前的LOCATE命令
COPY MEMO 复制当前记录中的指定备注字段的内容到文本文件
COPY PROCEDURES 将当前数据库中’的存储过程复制到文本文件
COPY STRUCTURE 用当前选择的表结构创建一个新的空自由表
COPY STRUCTURE EXTENDED 创建新表,它的字段包含当前选定表的结构信息
COPY TO ARRAY 将当前选定表中的数据复制到数组
COPY TO 用当前选定表的内容创建新文件
COUNT 统计表中记录数目
CREATE 生成一个新的VisualFoxPro表
CREATE CONNECTION 创建一个命名连接并把它存储在当前数据库中
CREATE DATABASE 创建并打开一个数据库
CREATE TRIGGER 创建表的删除、插入或更新触发器
CREATE VIEW 从VisualFoxPro环境创建视图文件
DELETE 给要删除的记录做标记
DELETE CONNECTION 从当前数据库中删除一个命名连接
DELETE DATABASE 从磁盘上删除数据库
DELETE TRIGGER 从当前数据库的表中删除“删除”、“插入”或“更新”触发器│
DELETE VIEW 从当前数据库中删除一个SQL视图
DISPLAY 在VisualFoxPro主窗口或用户自定义窗口中显示与当前表有关的信息
DISPLAY CONNECTIONS 显示当前数据库中与命名连接有关的信息
DISPLAY DATABASE 显示有关当前数据库的信息,或当前数据库中的字段、命名连接、表或视图的信息
DISPLAY MEMORY 显示内存变量和数组的当前内容
DISPLAY PROCEDURES 显示当前数据库中存储过程的名称
DISPLAY STRUCTURE 显示一个表文件的结构
DISPLAY TABLES 显示包含在当前数据库中所有的表和表的信息
DISPLAY VIEWS 显示当前数据库中关于SQL视图的信息以及SQL视图是否基于本地或远程表的信息
DROP TABLE 把一个表从数据库中移出,并从磁盘中删除它
DROP VIEW 从当前数据库中删除指定的SQL视图
EDIT 显示要编辑的字段 EXPORT 把VisualFoxPro表中的数据复制到其他格式的文件中
FIND 查找记录
FLUSH 将对表和索引所作的修改存入磁盘
FREE TABLE 删除表中的数据库引用
GATHER 将当前选定表中当前记录的数据替换为某个数组、内存变量组或对象中的数据
GO|GOTO 将记录指针移动到指定记录上
IMPORT 从外部文件导入数据,创建一个VisualFoxPro新表
INSERT 插入记录
JOIN 将两个数据库文件合并
LIST 连续显示表或环境信息
LIST CONNECTIONS 连续显示有关当前数据库中命名连接的信息
LIST DATABASE 连续显示有关当前数据库的信息
LIST PROCEDURES 连续显示当前数据库存储过程的名称
LIST TABLES 连续显示包含在当前数据库中的所有表和表的信息
LIST VIEWS 连续显示当前数据库中有关SQL视图的信息
LOCATE 按顺序搜索表从而找到满足指定逻辑表达式的第一个记录
MODIFY CONNECTION 显示连接设计器,让你能够交互地修改当前数据库中已有的命名连接
MODIFY DATABASE 打开数据库设计器,让你能够交互地修改当前数据库
MODIFY GENERAL 在编辑窗口中打开当前记录中的通用字段
MODIFY MEMO 打开当前记录备注字段的编辑窗口
MODIFY PROCEDURE 打开VisualFoxPro文本编辑器,可在其中为当前数据库创建新的存储过程
MODIFY STRUCTURE 显示表设计器
MODIFY VIEW 显示视图设计器
OPEN DATABASE 打开一个数据库
PACK 从当前表中永久删除标有删除标记的记录
PACK DATABASE 从当前数据库中删除标有删除标记的记录
RECALL 恢复所选表中带有删除标记的记录 •
REMOVE TABLE 从当前数据库中移去一个表
RENAME CONNECTION 重命名当前数据库中的一个命名连接
RENAME TABLE 重命名当前数据库中的表
RENAME VIEW 重命名当前数据库中的3QL视图
REPLACE 更新表的记录内容
REPLACE FROM ARRAY 使用内存变量数组中的值更新字段内容
SCAN...ENDSCAN 运行扫描数据表文件
SCATTER 从当前记录中把数据复制到一组内存变量或数组中
SEEK 查找记录命令
SELECT 激活指定工作区
SET AUTOINCERROR 在自动增加值产生错误时是否更新或插入一个值到记录中
SET COLLATE 指定在后续索引和拌序操作中,字符型字段的排序顺序
SET DATABASE 指定当前数据库
SET DATASESSION 激活指定的表单数据工作期
SET DELETED 指定VisualFoxPro是否处理标有删除标记的记录,以及其他命令是否可以操作它们
SET EXCLUSIVE 指定VisualFoxPro在网络上以独占方式还是共享方式打开表文件
SET FIELDS 指定可以访问表中的哪些字段
SET FILTER 指定访问当前表中记录时必须满足的条件
SET INDEX 打开一个或多个索引文件,供当前表使用 ;
‘拾’ MySQL优化全攻略--相关数据库命令
▲ SHOW 执行下面这个命令可以了解服务器的运行状态 mysql >show status;该命令将显示出一长列状态橡春变量及其对应的值 其中包括 被中止访问的用户数量 被中止的连接数量 尝试连接的次数 并发连接数量最大值 以及其他许多有用的信息 这些信息对于确定系统问题和效率低下的原因是十分有用的 SHOW命令除了能够显示出MySQL服务器整体状态信息之外 它还能够显示出有关日志文件 指定数据库 表 索引 进程和许可权限表的宝贵信息 请访问了解更多信息 ▲ EXPLAIN EXPLAIN能够分析SELECT命令的处理过程 这不仅对于决定是否要为表加上索引很有用 而且对于了解MySQL处理复杂连接的过程也很有用 下面这个例子显示了如何用EXPLAIN提供的信息逐步地优化连接查询 (本例来自MySQL文档 见 原文写到这里似乎有点潦草了事 特加上此例 )假定用EXPLAIN分析的SELECT命令如下所示 EXPLAIN SELECT tt TicketNumber tt TimeIn tt ProjectReference tt EstimatedShipDate tt ActualShipDate tt ClientID tt ServiceCodes tt RepetitiveID tt CurrentProcess tt CurrentDPPerson tt RecordVolume tt DPPrinted et COUNTRY et_ COUNTRY do CUSTNAMEFROM tt et et AS et_ doWHERE tt SubmitTime IS NULLAND tt ActualPC = et EMPLOYIDAND tt AssignedPC = et_ EMPLOYIDAND tt ClientID = do CUSTNMBR;SELECT命令中出现的表定义如下 ※表定义表 列 列类型tt ActualPC CHAR( )tt AssignedPC CHAR( )tt ClientID CHAR( )et EMPLOYID CHAR( )do CUSTNMBR CHAR( )※索引表 索引tt ActualPCtt AssignedPCtt ClientIDet EMPLOYID (主键)do CUSTNMBR (主键)※tt ActualPC值分布不均匀在进行任何优化之前 EXPLAIN对SELECT执行分析的结果如下 table type possible_keyskey key_len ref rows ExtraetALL PRIMARY NULL NULLNULL doALL PRIMARY NULL NULLNULL et_ ALL PRIMARY NULL NULLNULL ttALL AssignedPC ClientID ActualPC NULL NULLNULL range checked for each record (key map: )每一个表的type都是ALL 它表明MySQL为每一个表进行了完全连接!这个操作是相当耗时没扒的 因为待处理行的数量达到每一个表行数的乘积!即 这里的总处理行数为 * * * = 这里的问题之一在于 如果数据库列的声明不同梁察耐 MySQL(还)不能有效地运用列的索引 在这个问题上 VARCHAR和CHAR是一样的 除非它们声明的长度不同 由于tt ActualPC声明为CHAR( ) 而et EMPLOYID声明为CHAR( ) 因此这里存在列长度不匹配问题 为了解决这两个列的长度不匹配问题 用ALTER TABLE命令把ActualPC列从 个字符扩展到 字符 如下所示 mysql > ALTER TABLE tt MODIFY ActualPC VARCHAR( );现在tt ActualPC和et EMPLOYID都是VARCHAR( )了 执行EXPLAIN进行分析得到的结果如下所示 table typepossible_keyskey key_len ref rowsExtrattALLAssignedPC ClientID ActualPC NULL NULL NULL where useddoALLPRIMARY NULLNULLNULL range checked for each record (key map: )et_ ALLPRIMARY NULLNULLNULL range checked for each record (key map: )eteq_ref PRIMARY PRIMARY tt ActualPC 这还算不上完美 但已经好多了(行数的乘积现在少了一个系数 ) 现在这个SQL命令执行大概需要数秒钟时间 为了避免tt AssignedPC = et_ EMPLOYID以及tt ClientID = do CUSTNMBR比较中的列长度不匹配 我们可以进行如下改动 mysql > ALTER TABLE tt MODIFY AssignedPC VARCHAR( ) MODIFY ClientIDVARCHAR( );现在EXPLAIN显示的结果如下 table typepossible_keyskey key_len refrows ExtraetALLPRIMARY NULLNULLNULL ttrefAssignedPC ClientID ActualPC ActualPC et EMPLOYID where usedet_ eq_ref PRIMARY PRIMARY tt AssignedPC doeq_ref PRIMARY PRIMARY tt ClientID 这个结果已经比较令人满意了 余下的问题在于 默认情况下 MySQL假定tt ActualPC列的值均匀分布 而事实上tt表的情况并非如此 幸而 我们可以很容易地让MySQL知道这一点 shell > myisamc *** yze PATH_TO_MYSQL_DATABASE/ttshell > mysqladmin refresh现在这个连接操作已经非常理想 EXPLAIN分析的结果如下 table typepossible_keyskey key_len refrowsExtrattALLAssignedPC ClientID ActualPC NULL NULL NULL where usedeteq_ref PRIMARY PRIMARY tt ActualPC et_ eq_ref PRIMARY PRIMARY tt AssignedPC doeq_ref PRIMARY PRIMARY tt ClientID ▲ OPTIMIZE OPTIMIZE能够恢复和整理磁盘空间以及数据碎片 一旦对包含变长行的表进行了大量的更新或者删除 进行这个操作就非常有必要了 OPTIMIZE当前只能用于MyISAM和BDB表 结束语 从编译数据库服务器开始 贯穿整个管理过程 能够改善MySQL性能的因素实在非常多 本文只涉及了其中很小的一部分 lishixin/Article/program/MySQL/201311/29480