『壹』 誰有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