優(yōu)化MYSQL數(shù)據(jù)庫(kù)的方法

1、選取最適用的字段屬性,盡可能減少定義字段長(zhǎng)度,盡量把字段設(shè)置NOT NULL,例如'省份,性別',最好設(shè)置為ENUM

2、使用連接(JOIN)來(lái)代替子查詢:

a.刪除沒(méi)有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

b.提取所有沒(méi)有訂單客戶:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

c.提高b的速度優(yōu)化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid

WHERE orderinfo.customerid IS NULL

3、使用聯(lián)合(UNION)來(lái)代替手動(dòng)創(chuàng)建的臨時(shí)表

a.創(chuàng)建臨時(shí)表:SELECT name FROMnametestUNION SELECT username FROMnametest2

4、事務(wù)處理:

a.保證數(shù)據(jù)完整性,例如添加和修改同時(shí),兩者成立則都執(zhí)行,一者失敗都失敗

mysql_query("BEGIN");

mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";

mysql_query("SELECT * FROMorderinfowhere customerid=".$id");

mysql_query("COMMIT");

5、鎖定表,優(yōu)化事務(wù)處理:

a.我們用一個(gè) SELECT 語(yǔ)句取出初始數(shù)據(jù),通過(guò)一些計(jì)算,用 UPDATE 語(yǔ)句將新值更新到表中。

包含有 WRITE 關(guān)鍵字的 LOCK TABLE 語(yǔ)句可以保證在 UNLOCK TABLES 命令被執(zhí)行之前,

不會(huì)有其它的訪問(wèn)來(lái)對(duì) inventory 進(jìn)行插入、更新或者刪除的操作

mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");

mysql_query("SELECT customerid FROMcustomerinfowhere id=".$id);

mysql_query("UPDATEorderinfoSET ordertitle='$title' where customerid=".$id);

mysql_query("UNLOCK TABLES");

6、使用外鍵,優(yōu)化鎖定表

a.把customerinfo里的customerid映射到orderinfo里的customerid,

任何一條沒(méi)有合法的customerid的記錄不會(huì)寫(xiě)到orderinfo里

CREATE TABLE customerinfo

(

customerid INT NOT NULL,

PRIMARY KEY(customerid)

)TYPE = INNODB;

CREATE TABLE orderinfo

(

orderid INT NOT NULL,

customerid INT NOT NULL,

PRIMARY KEY(customerid,orderid),

FOREIGN KEY (customerid) REFERENCES customerinfo

(customerid) ON DELETE CASCADE

)TYPE = INNODB;

注意:'ON DELETE CASCADE',該參數(shù)保證當(dāng)customerinfo表中的一條記錄刪除的話同時(shí)也會(huì)刪除order

表中的該用戶的所有記錄,注意使用外鍵要定義事務(wù)安全類型為INNODB;

7、建立索引:

a.格式:

(普通索引)->

創(chuàng)建:CREATE INDEX <索引名> ON tablename (索引字段)

修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)

創(chuàng)表指定索引:CREATE TABLE tablename([...],INDEX索引名)

(唯一索引)->

創(chuàng)建:CREATE UNIQUE <索引名> ON tablename (索引字段)

修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)

創(chuàng)表指定索引:CREATE TABLE tablename([...],UNIQUE索引名)

(主鍵)->

它是唯一索引,一般在創(chuàng)建表是建立,格式為:

CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])

Mysql

? 著作權(quán)歸作者所有

舉報(bào)文章

關(guān)注Nick_Cai

寫(xiě)了 6288 字,被 6 人關(guān)注,獲得了 4 個(gè)喜歡

個(gè)人簡(jiǎn)介走在全棧web開(kāi)發(fā)的路上 QQ:835596913 Mobile:13...

如果覺(jué)得我的文章對(duì)您有用,請(qǐng)隨意打賞。您的支持將鼓勵(lì)我繼續(xù)創(chuàng)作!

贊賞支持

喜歡

0

更多分享

評(píng)論

智慧如你,不想發(fā)表一點(diǎn)想法咩~

被以下專題收入,發(fā)現(xiàn)更多相似內(nèi)容

我的專題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容