1.每個(gè)客戶端連接都會(huì)從服務(wù)器進(jìn)程中分到一個(gè)屬于它的線程。而該連接的相應(yīng)查詢都都會(huì)通過該線程處理。 2.服務(wù)器會(huì)緩存線程。因此并不會(huì)為每個(gè)新連接創(chuàng)建或者銷毀線程。 3.當(dāng)發(fā)起對(duì)MySQL服務(wù)器的連接時(shí),服務(wù)器會(huì)對(duì) username,host,password進(jìn)行驗(yàn)證。而一旦連接上,服務(wù)器就會(huì)檢測(cè)其權(quán)限。 4.MySQL查詢緩存只會(huì)保存 SELECT 語(yǔ)句和相應(yīng)的結(jié)果。在解析查詢之前會(huì)詢問查詢緩存,如果查詢緩存中能找到相應(yīng)的結(jié)果就直接返回結(jié)果。 5.MySQL的 data 文件夾下會(huì)根據(jù)每個(gè)數(shù)據(jù)庫(kù)建立一個(gè)相應(yīng)名稱的文件夾。而每一張表對(duì)應(yīng)的有三個(gè)不同后綴的文件:.frm,.MYD,.MYI。其中 .frm 后綴的文件用來存儲(chǔ)表的定義。.MYD(mysql data)存儲(chǔ)的是數(shù)據(jù),而.MYI(mysql index)存儲(chǔ)的是索引。 6.關(guān)于IP的存儲(chǔ)類型選擇。別再使用 varchar(15) 了,應(yīng)該使用 INT UNSIGNED。而且最好是使用PHP的內(nèi)置函數(shù)ip2long()和 long2ip() 來處理,而不是使用 MySQL 的函數(shù) INET_ATON() 和 INET_NTOA()。盡可能地將計(jì)算和轉(zhuǎn)換之類的東西交給程序來完成。存儲(chǔ)為 INT 不僅節(jié)省了空間,而且利于查詢。比如我想要查詢出某個(gè)IP段的所有IP,varchar 是沒辦法進(jìn)行的。 7. B+Tree 索引保存數(shù)據(jù)的順序和建表時(shí)的字段順序一致。InnoDB會(huì)自動(dòng)在內(nèi)存中為一些被頻繁訪問的索引值建立內(nèi)存索引以加快速度。 8.以下查詢會(huì)引起索引失效: 復(fù)制代碼 代碼如下: SELECT name FROM user WHERE id+1=4; // mysql不會(huì)從計(jì)算中去分析出id是有索引的 SELECT name FROM user WHERE TO_DAYS(birth) > 20; // mysql索引的是birth本身,而不是TO_DAYS()轉(zhuǎn)化之后的數(shù)據(jù) 1.復(fù)制表結(jié)構(gòu) CREATE TABLE b LIKE a; 2.更改存儲(chǔ)引擎 ALTER TABLE a ENGINE=InnoDB; 3.復(fù)制表數(shù)據(jù) INSERT INTO b SELECT * FROM a; 4.獲取表信息 SHOW TABLE STATUS LIKE '%XXX%'; // 獲取表名符合LIKE的表信息。 SHOW TABLE STATUS FROM `數(shù)據(jù)庫(kù)名`; // 獲取該數(shù)據(jù)庫(kù)下所有表的信息 5.清空二進(jìn)制日志 RESET MASTER; 6.返回某字段前X個(gè)字符 SELECT LEFT(name, 3) AS pre_name FROM user; 7.為某字段添加前綴索引 ALERT TABLE xxx ADD KEY (name(3)); 8.避免讀取不必要的行,使用索引覆蓋查詢 SELECT * FROM JOIN (SELECT prod_id FROM products WHERE actor='SEAN CARREY' AND title LIKE '%APOLLO%') AS t ON (t.prod_id=products.prod_id); // 其中actor有索引