真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

寶塔mysql怎么加速 寶塔 mysql

如何解決mysql 查詢和更新速度慢

索引是快速搜索的關(guān)鍵。MySQL索引的建立對(duì)于mysql的高效運(yùn)行是很重要的。下面幾種常見的MySQL索引類型。

成都創(chuàng)新互聯(lián)于2013年開始,先為吉水等服務(wù)建站,吉水等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為吉水企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在數(shù)據(jù)庫表中,對(duì)字段建立索引可以大大提高查詢速度。假如我們創(chuàng)建了一個(gè) mytable表:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我們隨機(jī)向里面插入了10000條記錄,其中有一條:5555,admin。

在查找username="admin"的記錄 SELECT * FROMmytable WHERE username='admin';時(shí),如果在username上已經(jīng)建立了索引,MySQL無須任何掃描,即準(zhǔn)確可找到該記錄。相反,MySQL會(huì)掃描所有記錄,即要查詢10000條記錄。

索引分單列索引和組合索引。單列索引,即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引,但這不是組合索引。組合索引,即一個(gè)索包含多個(gè)列。

MySQL索引類型包括:

(1)普通索引

這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:

◆創(chuàng)建索引

CREATE INDEX indexName ONmytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小于字段實(shí)際長度;如果是BLOB和TEXT類型,必須指定 length,下同。

◆修改表結(jié)構(gòu)

ALTER mytable ADD INDEX [indexName] ON(username(length)) ◆創(chuàng)建表的時(shí)候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 刪除索引的語法:

DROP INDEX [indexName] ON mytable;

(2)唯一索引

它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:

◆創(chuàng)建索引

CREATE UNIQUE INDEX indexName ONmytable(username(length)) ◆修改表結(jié)構(gòu)

ALTER mytable ADD UNIQUE [indexName] ON(username(length)) ◆創(chuàng)建表的時(shí)候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

(3)主鍵索引

它是一種特殊的唯一索引,不允許有空值。一般是在建表的時(shí)候同時(shí)創(chuàng)建主鍵索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 當(dāng)然也可以用 ALTER 命令。記?。阂粋€(gè)表只能有一個(gè)主鍵。

(4)組合索引

為了形象地對(duì)比單列索引和組合索引,為表添加多個(gè)字段:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 為了進(jìn)一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個(gè)索引里:

ALTER TABLE mytable ADD INDEX name_city_age(name(10),city,age); 建表時(shí),usernname長度為 16,這里用 10。這是因?yàn)橐话闱闆r下名字的長度不會(huì)超過10,這樣會(huì)加速索引查詢速度,還會(huì)減少索引文件的大小,提高INSERT的更新速度。

提高M(jìn)ySQL數(shù)據(jù)庫查詢效率有哪些技巧?

1.合理使用索引

索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢效率?,F(xiàn)在大多數(shù)的數(shù)據(jù)庫產(chǎn)品都采用IBM最先提出的ISAM索引結(jié)構(gòu)。索引的使用要恰到好處,其使用原則如下:

●在經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的列上建立索引,而不經(jīng)常連接的字段則由優(yōu)化器自動(dòng)生成索引。

●在頻繁進(jìn)行排序或分組(即進(jìn)行g(shù)roup by或order by操作)的列上建立索引。

●在條件表達(dá)式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引。比如在雇員表的“性別”列上只有“男”與“女”兩個(gè)不同值,因此就無必要建立索引。如果建立索引不但不會(huì)提高查詢效率,反而會(huì)嚴(yán)重降低更新速度。

●如果待排序的列有多個(gè),可以在這些列上建立復(fù)合索引(compound index)。

●使用系統(tǒng)工具。如Informix數(shù)據(jù)庫有一個(gè)tbcheck工具,可以在可疑的索引上進(jìn)行檢查。在一些數(shù)據(jù)庫服務(wù)器上,索引可能失效或者因?yàn)轭l繁操作而使得讀取效率降低,如果一個(gè)使用索引的查詢不明不白地慢下來,可以試著用tbcheck工具檢查索引的完整性,必要時(shí)進(jìn)行修復(fù)。另外,當(dāng)數(shù)據(jù)庫表更新大量數(shù)據(jù)后,刪除并重建索引可以提高查詢速度。

2.避免或簡化排序

應(yīng)當(dāng)簡化或避免對(duì)大型表進(jìn)行重復(fù)的排序。當(dāng)能夠利用索引自動(dòng)以適當(dāng)?shù)拇涡虍a(chǎn)生輸出時(shí),優(yōu)化器就避免了排序的步驟。以下是一些影響因素:

●索引中不包括一個(gè)或幾個(gè)待排序的列;

●group by或order by子句中列的次序與索引的次序不一樣;

●排序的列來自不同的表。

為了避免不必要的排序,就要正確地增建索引,合理地合并數(shù)據(jù)庫表(盡管有時(shí)可能影響表的規(guī)范化,但相對(duì)于效率的提高是值得的)。如果排序不可避免,那么應(yīng)當(dāng)試圖簡化它,如縮小排序的列的范圍等。

3.消除對(duì)大型表行數(shù)據(jù)的順序存取

在嵌套查詢中,對(duì)表的順序存取對(duì)查詢效率可能產(chǎn)生致命的影響。比如采用順序存取策略,一個(gè)嵌套3層的查詢,如果每層都查詢1000行,那么這個(gè)查詢就要查詢10億行數(shù)據(jù)。避免這種情況的主要方法就是對(duì)連接的列進(jìn)行索引。例如,兩個(gè)表:學(xué)生表(學(xué)號(hào)、姓名、年齡……)和選課表(學(xué)號(hào)、課程號(hào)、成績)。如果兩個(gè)表要做連接,就要在“學(xué)號(hào)”這個(gè)連接字段上建立索引。

還可以使用并集來避免順序存取。盡管在所有的檢查列上都有索引,但某些形式的where子句強(qiáng)迫優(yōu)化器使用順序存取。下面的查詢將強(qiáng)迫對(duì)orders表執(zhí)行順序操作:

SELECT * FROM orders WHERE (customer_num=104 AND order_num;1001) OR order_num=1008

雖然在customer_num和order_num上建有索引,但是在上面的語句中優(yōu)化器還是使用順序存取路徑掃描整個(gè)表。因?yàn)檫@個(gè)語句要檢索的是分離的行的集合,所以應(yīng)該改為如下語句:

SELECT * FROM orders WHERE customer_num=104 AND order_num;1001

UNION

SELECT * FROM orders WHERE order_num=1008

這樣就能利用索引路徑處理查詢。

4.避免相關(guān)子查詢

一個(gè)列的標(biāo)簽同時(shí)在主查詢和where子句中的查詢中出現(xiàn),那么很可能當(dāng)主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應(yīng)當(dāng)盡量避免子查詢。如果子查詢不可避免,那么要在子查詢中過濾掉盡可能多的行。

5.避免困難的正規(guī)表達(dá)式

MATCHES和LIKE關(guān)鍵字支持通配符匹配,技術(shù)上叫正規(guī)表達(dá)式。但這種匹配特別耗費(fèi)時(shí)間。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _”

即使在zipcode字段上建立了索引,在這種情況下也還是采用順序掃描的方式。如果把語句改為SELECT * FROM customer WHERE zipcode ;“98000”,在執(zhí)行查詢時(shí)就會(huì)利用索引來查詢,顯然會(huì)大大提高速度。

另外,還要避免非開始的子串。例如語句:SELECT * FROM customer WHERE zipcode[2,3] ;“80”,在where子句中采用了非開始子串,因而這個(gè)語句也不會(huì)使用索引。

6.使用臨時(shí)表加速查詢

7.用排序來取代非順序存取

如何有效地提高 MySQL 的備份和恢復(fù)速度

一 加速備份

1、 加了single-transaction參數(shù) 備份時(shí) 需要先flush table with read lock 這個(gè)過程中會(huì)有一個(gè)鎖表的過程,如果有事務(wù)或語句正在執(zhí)行,沒有結(jié)束,那么備份進(jìn)程會(huì)一直等待,并且阻塞別的事務(wù),那么也會(huì)影響業(yè)務(wù)。所以要先確認(rèn)備份的時(shí)候沒有大的事務(wù)在運(yùn)行。具體 single-transaction的加鎖可以參考 我的博客:mysqldump備份時(shí)加single-transaction會(huì)不會(huì)加鎖2 、mysqldump是單進(jìn)程的,沒有辦法并行,但現(xiàn)在機(jī)器的瓶頸多是出現(xiàn)在IO方面,可以使用更了的IO設(shè)備加快速度3 、mysqldump時(shí)如果空間夠的話,不要邊壓縮邊備份二 加速恢復(fù)

1 關(guān)閉binlog:不寫入Binlog會(huì)大大的加快數(shù)據(jù)導(dǎo)入的速度2 innodb_flush_log_at_trx_commit=0

3 更好的配置

建議:

如果非要使用邏輯備份,可以考慮mysqldumper, mysqlpump(5.7)這兩個(gè)工具去備份,這兩個(gè)在備份的時(shí)候支持并行操作,mysqldumper還可以對(duì)單表進(jìn)行恢復(fù),在只需要恢復(fù)單表的情況下,恢復(fù)速度會(huì)大大加快使用物理備份 xtrabackup (open source),MEB(oracle提供,收費(fèi)): 他們的備份原理是基于mysql crash recover, 備份速度 是和邏輯備份的相差不太大。但是恢復(fù)速度卻有很大的提升。

邏輯備份 備出來的是sql語句文件,恢復(fù)時(shí)需要一條一條的執(zhí)行sql,所以恢復(fù)很慢。

而物理備份和還原的速度 相當(dāng)于直接copy文件,所以恢復(fù)的時(shí)候性能有很大的提升并且這兩個(gè)軟件還支持并行,效果更好。

邏輯備份最大的優(yōu)點(diǎn)是 備份好的文件經(jīng)壓縮后占用空間較小,最大缺點(diǎn)恢復(fù)太慢物理備份可以很快的恢復(fù),但是備份好的文件壓縮后占用空間比邏輯備份要大

求高手優(yōu)化MySQL數(shù)據(jù)庫,數(shù)據(jù)庫反應(yīng)太慢。

在開始演示之前,我們先介紹下兩個(gè)概念。

概念一,數(shù)據(jù)的可選擇性基數(shù),也就是常說的cardinality值。

查詢優(yōu)化器在生成各種執(zhí)行計(jì)劃之前,得先從統(tǒng)計(jì)信息中取得相關(guān)數(shù)據(jù),這樣才能估算每步操作所涉及到的記錄數(shù),而這個(gè)相關(guān)數(shù)據(jù)就是cardinality。簡單來說,就是每個(gè)值在每個(gè)字段中的唯一值分布狀態(tài)。

比如表t1有100行記錄,其中一列為f1。f1中唯一值的個(gè)數(shù)可以是100個(gè),也可以是1個(gè),當(dāng)然也可以是1到100之間的任何一個(gè)數(shù)字。這里唯一值越的多少,就是這個(gè)列的可選擇基數(shù)。

那看到這里我們就明白了,為什么要在基數(shù)高的字段上建立索引,而基數(shù)低的的字段建立索引反而沒有全表掃描來的快。當(dāng)然這個(gè)只是一方面,至于更深入的探討就不在我這篇探討的范圍了。

概念二,關(guān)于HINT的使用。

這里我來說下HINT是什么,在什么時(shí)候用。

HINT簡單來說就是在某些特定的場景下人工協(xié)助MySQL優(yōu)化器的工作,使她生成最優(yōu)的執(zhí)行計(jì)劃。一般來說,優(yōu)化器的執(zhí)行計(jì)劃都是最優(yōu)化的,不過在某些特定場景下,執(zhí)行計(jì)劃可能不是最優(yōu)化。

比如:表t1經(jīng)過大量的頻繁更新操作,(UPDATE,DELETE,INSERT),cardinality已經(jīng)很不準(zhǔn)確了,這時(shí)候剛好執(zhí)行了一條SQL,那么有可能這條SQL的執(zhí)行計(jì)劃就不是最優(yōu)的。為什么說有可能呢?

來看下具體演示

譬如,以下兩條SQL,

A:

select * from t1 where f1 = 20;

B:

select * from t1 where f1 = 30;

如果f1的值剛好頻繁更新的值為30,并且沒有達(dá)到MySQL自動(dòng)更新cardinality值的臨界值或者說用戶設(shè)置了手動(dòng)更新又或者用戶減少了sample page等等,那么對(duì)這兩條語句來說,可能不準(zhǔn)確的就是B了。

這里順帶說下,MySQL提供了自動(dòng)更新和手動(dòng)更新表cardinality值的方法,因篇幅有限,需要的可以查閱手冊。

那回到正題上,MySQL 8.0 帶來了幾個(gè)HINT,我今天就舉個(gè)index_merge的例子。

示例表結(jié)構(gòu):

mysql desc t1;+------------+--------------+------+-----+---------+----------------+| Field ? ? ?| Type ? ? ? ? | Null | Key | Default | Extra ? ? ? ? ?|+------------+--------------+------+-----+---------+----------------+| id ? ? ? ? | int(11) ? ? ?| NO ? | PRI | NULL ? ?| auto_increment || rank1 ? ? ?| int(11) ? ? ?| YES ?| MUL | NULL ? ?| ? ? ? ? ? ? ? ?|| rank2 ? ? ?| int(11) ? ? ?| YES ?| MUL | NULL ? ?| ? ? ? ? ? ? ? ?|| log_time ? | datetime ? ? | YES ?| MUL | NULL ? ?| ? ? ? ? ? ? ? ?|| prefix_uid | varchar(100) | YES ?| ? ? | NULL ? ?| ? ? ? ? ? ? ? ?|| desc1 ? ? ?| text ? ? ? ? | YES ?| ? ? | NULL ? ?| ? ? ? ? ? ? ? ?|| rank3 ? ? ?| int(11) ? ? ?| YES ?| MUL | NULL ? ?| ? ? ? ? ? ? ? ?|+------------+--------------+------+-----+---------+----------------+7 rows in set (0.00 sec)

表記錄數(shù):

mysql select count(*) from t1;+----------+| count(*) |+----------+| ? ?32768 |+----------+1 row in set (0.01 sec)

這里我們兩條經(jīng)典的SQL:

SQL C:

select * from t1 where rank1 = 1 or rank2 = 2 or rank3 = 2;

SQL D:

select * from t1 where rank1 =100 ?and rank2 =100 ?and rank3 =100;

表t1實(shí)際上在rank1,rank2,rank3三列上分別有一個(gè)二級(jí)索引。

那我們來看SQL C的查詢計(jì)劃。

顯然,沒有用到任何索引,掃描的行數(shù)為32034,cost為3243.65。

mysql explain ?format=json select * from t1 ?where rank1 =1 or rank2 = 2 or rank3 = 2\G*************************** 1. row ***************************EXPLAIN: { ?"query_block": { ? ?"select_id": 1, ? ?"cost_info": { ? ? ?"query_cost": "3243.65" ? ?}, ? ?"table": { ? ? ?"table_name": "t1", ? ? ?"access_type": "ALL", ? ? ?"possible_keys": [ ? ? ? ?"idx_rank1", ? ? ? ?"idx_rank2", ? ? ? ?"idx_rank3" ? ? ?], ? ? ?"rows_examined_per_scan": 32034, ? ? ?"rows_produced_per_join": 115, ? ? ?"filtered": "0.36", ? ? ?"cost_info": { ? ? ? ?"read_cost": "3232.07", ? ? ? ?"eval_cost": "11.58", ? ? ? ?"prefix_cost": "3243.65", ? ? ? ?"data_read_per_join": "49K" ? ? ?}, ? ? ?"used_columns": [ ? ? ? ?"id", ? ? ? ?"rank1", ? ? ? ?"rank2", ? ? ? ?"log_time", ? ? ? ?"prefix_uid", ? ? ? ?"desc1", ? ? ? ?"rank3" ? ? ?], ? ? ?"attached_condition": "((`ytt`.`t1`.`rank1` = 1) or (`ytt`.`t1`.`rank2` = 2) or (`ytt`.`t1`.`rank3` = 2))" ? ?} ?}}1 row in set, 1 warning (0.00 sec)

我們加上hint給相同的查詢,再次看看查詢計(jì)劃。

這個(gè)時(shí)候用到了index_merge,union了三個(gè)列。掃描的行數(shù)為1103,cost為441.09,明顯比之前的快了好幾倍。

mysql explain ?format=json select /*+ index_merge(t1) */ * from t1 ?where rank1 =1 or rank2 = 2 or rank3 = 2\G*************************** 1. row ***************************EXPLAIN: { ?"query_block": { ? ?"select_id": 1, ? ?"cost_info": { ? ? ?"query_cost": "441.09" ? ?}, ? ?"table": { ? ? ?"table_name": "t1", ? ? ?"access_type": "index_merge", ? ? ?"possible_keys": [ ? ? ? ?"idx_rank1", ? ? ? ?"idx_rank2", ? ? ? ?"idx_rank3" ? ? ?], ? ? ?"key": "union(idx_rank1,idx_rank2,idx_rank3)", ? ? ?"key_length": "5,5,5", ? ? ?"rows_examined_per_scan": 1103, ? ? ?"rows_produced_per_join": 1103, ? ? ?"filtered": "100.00", ? ? ?"cost_info": { ? ? ? ?"read_cost": "330.79", ? ? ? ?"eval_cost": "110.30", ? ? ? ?"prefix_cost": "441.09", ? ? ? ?"data_read_per_join": "473K" ? ? ?}, ? ? ?"used_columns": [ ? ? ? ?"id", ? ? ? ?"rank1", ? ? ? ?"rank2", ? ? ? ?"log_time", ? ? ? ?"prefix_uid", ? ? ? ?"desc1", ? ? ? ?"rank3" ? ? ?], ? ? ?"attached_condition": "((`ytt`.`t1`.`rank1` = 1) or (`ytt`.`t1`.`rank2` = 2) or (`ytt`.`t1`.`rank3` = 2))" ? ?} ?}}1 row in set, 1 warning (0.00 sec)

我們再看下SQL D的計(jì)劃:

不加HINT,

mysql explain format=json select * from t1 where rank1 =100 and rank2 =100 and rank3 =100\G*************************** 1. row ***************************EXPLAIN: { ?"query_block": { ? ?"select_id": 1, ? ?"cost_info": { ? ? ?"query_cost": "534.34" ? ?}, ? ?"table": { ? ? ?"table_name": "t1", ? ? ?"access_type": "ref", ? ? ?"possible_keys": [ ? ? ? ?"idx_rank1", ? ? ? ?"idx_rank2", ? ? ? ?"idx_rank3" ? ? ?], ? ? ?"key": "idx_rank1", ? ? ?"used_key_parts": [ ? ? ? ?"rank1" ? ? ?], ? ? ?"key_length": "5", ? ? ?"ref": [ ? ? ? ?"const" ? ? ?], ? ? ?"rows_examined_per_scan": 555, ? ? ?"rows_produced_per_join": 0, ? ? ?"filtered": "0.07", ? ? ?"cost_info": { ? ? ? ?"read_cost": "478.84", ? ? ? ?"eval_cost": "0.04", ? ? ? ?"prefix_cost": "534.34", ? ? ? ?"data_read_per_join": "176" ? ? ?}, ? ? ?"used_columns": [ ? ? ? ?"id", ? ? ? ?"rank1", ? ? ? ?"rank2", ? ? ? ?"log_time", ? ? ? ?"prefix_uid", ? ? ? ?"desc1", ? ? ? ?"rank3" ? ? ?], ? ? ?"attached_condition": "((`ytt`.`t1`.`rank3` = 100) and (`ytt`.`t1`.`rank2` = 100))" ? ?} ?}}1 row in set, 1 warning (0.00 sec)

加了HINT,

mysql explain format=json select /*+ index_merge(t1)*/ * from t1 where rank1 =100 and rank2 =100 and rank3 =100\G*************************** 1. row ***************************EXPLAIN: { ?"query_block": { ? ?"select_id": 1, ? ?"cost_info": { ? ? ?"query_cost": "5.23" ? ?}, ? ?"table": { ? ? ?"table_name": "t1", ? ? ?"access_type": "index_merge", ? ? ?"possible_keys": [ ? ? ? ?"idx_rank1", ? ? ? ?"idx_rank2", ? ? ? ?"idx_rank3" ? ? ?], ? ? ?"key": "intersect(idx_rank1,idx_rank2,idx_rank3)", ? ? ?"key_length": "5,5,5", ? ? ?"rows_examined_per_scan": 1, ? ? ?"rows_produced_per_join": 1, ? ? ?"filtered": "100.00", ? ? ?"cost_info": { ? ? ? ?"read_cost": "5.13", ? ? ? ?"eval_cost": "0.10", ? ? ? ?"prefix_cost": "5.23", ? ? ? ?"data_read_per_join": "440" ? ? ?}, ? ? ?"used_columns": [ ? ? ? ?"id", ? ? ? ?"rank1", ? ? ? ?"rank2", ? ? ? ?"log_time", ? ? ? ?"prefix_uid", ? ? ? ?"desc1", ? ? ? ?"rank3" ? ? ?], ? ? ?"attached_condition": "((`ytt`.`t1`.`rank3` = 100) and (`ytt`.`t1`.`rank2` = 100) and (`ytt`.`t1`.`rank1` = 100))" ? ?} ?}}1 row in set, 1 warning (0.00 sec)

對(duì)比下以上兩個(gè),加了HINT的比不加HINT的cost小了100倍。

總結(jié)下,就是說表的cardinality值影響這張的查詢計(jì)劃,如果這個(gè)值沒有正常更新的話,就需要手工加HINT了。相信MySQL未來的版本會(huì)帶來更多的HINT。

mysql 事務(wù)寫入速度很慢,有什么辦法能加速?

mysql5的手冊中提到,插入一條記錄,所需的時(shí)間比例大概是:

連接:(3)

發(fā)送查詢給服務(wù)器:(2)

分析查詢:(2)

插入記錄:(1x記錄大?。?/p>

插入索引:(1x索引)

關(guān)閉:(1)

并且表的大小以logN(B樹)的速度減慢索引的插入,因此提高插入速度的方法大概有以下7種:

一個(gè)insert語句包含多個(gè)value值;

使用insert delayed方法;

使用insert into ...values(select ...from),即select的同時(shí)執(zhí)行insert;

使用load data infile;

先禁掉索引,插入后再創(chuàng)建索引;

寫鎖表,插入,解鎖。原因是索引緩存區(qū)僅在所有insert語句完成后才刷新到磁盤上一次;

增加key_buffer_size值來擴(kuò)大鍵高速緩沖區(qū)。

如何用一款小工具大大加速M(fèi)ySQL SQL語句優(yōu)化

1.將經(jīng)常要用到的字段(比如經(jīng)常要用這些字段來排序,或者用來做搜索),則最好將這些字段設(shè)為索引。 2.字段的種類盡可能用int 或者tinyint類型。另外字段盡可能用NOT NULL。 3.當(dāng)然無可避免某些字段會(huì)用到text ,varchar等字符類型,最好將text字段的單獨(dú)出另外一個(gè)表出來(用主鍵關(guān)聯(lián)好) 4.字段的類型,以及長度,是一個(gè)很考究開發(fā)者優(yōu)化功力的一個(gè)方面。如果表數(shù)據(jù)有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得字段的優(yōu)化建議?。ㄔ趐hpmyadmin里可以在查看表時(shí),點(diǎn)擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表字段結(jié)構(gòu) 趨向完善。 5.select * 盡量少用,你想要什么字段 就select 什么字段出來 不要老是用* 號(hào)!同理,只要一行數(shù)據(jù)時(shí)盡量使用 LIMIT 1 6.絕對(duì)不要輕易用order by rand() ,很可能會(huì)導(dǎo)致mysql的災(zāi)難??! 7.每個(gè)表都應(yīng)該設(shè)置一個(gè)ID主鍵,最好的是一個(gè)INT型,并且設(shè)置上自動(dòng)增加的AUTO_INCREMENT標(biāo)志,這點(diǎn)其實(shí)應(yīng)該作為設(shè)計(jì)表結(jié)構(gòu)的第一件必然要做的事!! 8.拆分大的 DELETE 或 INSERT 語句。因?yàn)檫@兩個(gè)操作是會(huì)鎖表的,表一鎖住了,別的操作都進(jìn)不來了,就我來說 有時(shí)候我寧愿用for循環(huán)來一個(gè)個(gè)執(zhí)行這些操作。 9.不要用永久鏈接 mysql_pconnect();除非你真的非??隙愕某绦虿粫?huì)發(fā)生意外,不然很可能也會(huì)導(dǎo)致你的mysql死掉。 10.永遠(yuǎn)別要用復(fù)雜的mysql語句來顯示你的聰明。就我來說,看到一次關(guān)聯(lián)了三,四個(gè)表的語句,只會(huì)讓人覺得很不靠譜。


當(dāng)前標(biāo)題:寶塔mysql怎么加速 寶塔 mysql
文章鏈接:http://weahome.cn/article/hjijjh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部