国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

優(yōu)化mysql使用的方法以及使用到的工具和命令

2024-07-24 13:00:13
字體:
供稿:網(wǎng)友
優(yōu)化MySQL使用的方法以及使用到的工具和命令1.使用pgcc(pentium gcc)編譯器 該編譯器(http://www.goof.com/pcg/)針對運行在奔騰處理器系統(tǒng)上的程序進行優(yōu)化,用pgcc編譯mysql源代碼,總體性能可提高10%。當(dāng)然如果你的服務(wù)器不是用奔騰處理器,就不必用它了,因為它是專為奔騰系統(tǒng)設(shè)計的。2.僅使用你想使用的字符集編譯mysql mysql目前提供多達24種不同的字符集,為全球用戶以他們自己的語言插入或查看表中的數(shù)據(jù)。卻省情況下,mysql安裝所有者這些字符集,熱然而,最好的選擇是指選擇一種你需要的。如,禁止除latin1字符集以外的所有其它字符集: %>./configure -with-extra-charsets=none [--other-configuration-options]3.將mysqld編譯成靜態(tài)執(zhí)行文件 將mysqld編譯成靜態(tài)執(zhí)行文件而無需共享庫也能獲得更好的性能。通過在配置時指定下列選項,可靜態(tài)編譯mysqld。%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]4.配置樣本 下列配置命令常用于提高性能: %>cflags="-o6 -mpentiumPRo -fomit-frame-pointer" cxx=gcc cxxflags="-o6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared5.確保運用正確的編譯固然重要,但這只是成功的第一步,配置眾多的mysql變量同樣對服務(wù)器的正常運行起關(guān)鍵作用。你可以將這些變量的賦值存在一個配置文件中,以確保它們在每次啟動mysql時均起作用,這個配置文件就是my.cnf文件。 mysql已經(jīng)提供了幾個my.cnf文件的樣本,可在/usr/local/mysqld/share/mysql/目錄下找到。這些文件分別命名為my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規(guī)模說明可在描述配置文件適用的系統(tǒng)類型標(biāo)題中找到。如果在只有相當(dāng)少內(nèi)存的系統(tǒng)上運行mysql,而且只是偶爾的用一下,那么my-small.cnf會比較理想,因為它命令mysqld只使用最少的資源。類似地,如果你計劃構(gòu)建電子商務(wù)超市,而且系統(tǒng)擁有2g內(nèi)存,那么你可能要用到mysql-huge.cnf文件了。 為了利用這些文件中的一個,你需要復(fù)制一個最適合需求的文件,改名為my.cnf。你可以選擇使用配置文件三種作用范圍的一種: global:將my.cnf文件復(fù)制到服務(wù)器的/etc目錄下,這使得配置文件中的變量作用于全局,即對所有服務(wù)器上的mysql數(shù)據(jù)庫服務(wù)器有效。  local:將my.cnf文件復(fù)制到[mysql-install-dir]/var/目錄下,使得my.cnf作用于特定的服務(wù)器。[mysql-install-dir]表示mysql安裝目錄。  user:你可以再限制作用于特定的用戶,將my.cnf復(fù)制到用戶的根目錄下。 究竟如何設(shè)置my.cnf中的這些變量呢?更進一步說,你可以設(shè)置哪一個變量。雖然所用變量對mysql服務(wù)器相對通用,每一個變量與mysql的的某些組件有更特定的關(guān)系。如變量max_connects歸在mysqld類別下。執(zhí)行下列命令即可知道:%>/usr/local/mysql/libexec/mysqld--help 它顯示大量的選項及與mysqld相關(guān)的變量。你可以很容易地在該行文字之下找出變量:possible variables for option --set-variable (-o) are然后你可以如下設(shè)置my.cnf中的那些變量:set-variable = max_connections=100它設(shè)置mysql服務(wù)器的最大并發(fā)連接數(shù)為100。要確保在my.cnf文件中的[mysqld]標(biāo)題下插入變量設(shè)置。事務(wù)安全 dbd berkeley db(dbd)表是支持事務(wù)處理的表,由sleepycat軟件公司(http://www.sleepycat.com)開發(fā)。它提供mysql用戶期待已久的功能-事務(wù)控制。事務(wù)控制在任何數(shù)據(jù)庫系統(tǒng)中都是一個極有價值的功能,因為它們確保一組命令能成功地執(zhí)行。 非事務(wù)安全 heap heap表是mysql中存取數(shù)據(jù)最快的表。這是因為他們使用存儲在動態(tài)內(nèi)存中的一個哈希索引。另一個要點是如果mysql或服務(wù)器崩潰,數(shù)據(jù)將丟失。   isam isam表是早期mysql版本的缺省表類型,直到myiasm開發(fā)出來。建議不要再使用它。   merge merge是一個有趣的新類型,在3.23.25之后出現(xiàn)。一個merge表實際上是一個相同myisam表的集合,合并成一個表,主要是為了效率原因。這樣可以提高速度、搜索效率、修復(fù)效率并節(jié)省磁盤空間。   myiasm 這是mysql的缺省表類型。它基于iasm代碼,但有很多有用的擴展。myiasm比較好的原因: myiasm表小于iasm表,所以使用較少資源。 myiasm表在不同的平臺上二進制層可移植。 更大的鍵碼尺寸,更大的鍵碼上限。 指定表類型 你可在創(chuàng)建表時指定表的類型。下例創(chuàng)建一個heap表: mysql>create table email_addresses type=heap ( ->email char(55) not null, ->name char(30) not null, ->primary key(email) ); bdb表需要一些配置工作,參見http://www.mysql.com/doc/b/d/bdb_overview.html。 更多的表類型 為了使mysql管理工作更有趣,即將發(fā)布的mysql 4.0將提供兩種新的表類型,稱為innobase和gemeni。 show 你可能有興趣知道m(xù)ysql服務(wù)器究竟更了什么,下列命令給出一個總結(jié): 、mysql>show status; 它給出了一個相當(dāng)長的狀態(tài)變量及其值的列表。有些變量包含了異常終止客戶的數(shù)量、異常終止連接的數(shù)量、連接嘗試的次數(shù)、最大并發(fā)連接數(shù)和大量其他有用的信息。這些信息對找出系統(tǒng)問題和低效極具價值。 show還能做更多的事情。它可以顯示關(guān)于日志文件、特定數(shù)據(jù)庫、表、索引、進程和權(quán)限表中有價值的信息。詳見mysql手冊。 explain 當(dāng)你面對select語句時,explain解釋select命令如何被處理。這不僅對決定是否應(yīng)該增加一個索引,而且對決定一個復(fù)雜的join如何被mysql處理都是有幫助的。 optimize optimize語句允許你恢復(fù)空間和合并數(shù)據(jù)文件碎片,對包含變長行的表進行了大量更新和刪除后,這樣做特別重要。optimize目前只工作于myiasm和bdb表。3. 一張mysql大數(shù)據(jù)表有幾千萬數(shù)據(jù),但有一自增id字段,且為主鍵,要遍歷此表的所有數(shù)據(jù),寫出有效的方法和sql(禁止使用limit n,m)。答:案例分析:數(shù)據(jù)表 collect ( id, title ,info ,vtype) 就這4個字段,其中 title 用定長,info 用text, id 是逐漸,vtype是tinyint,vtype是索引。10萬數(shù)據(jù)的效果。select id,title from collect limit 1000,10; 基本上0.01秒就OKselect id,title from collect limit 90000,10;                8-9秒完成select id from collect order by id limit 90000,10;  0.04秒就OK。 為什么?因為用了id主鍵做索引當(dāng)然快。改進方法:select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10;;select id from collect where vtype=1 order by id limit 90000,10; 很慢,用了8-9秒!vtype 做了索引了啊?怎么會慢呢?vtype做了索引是不錯,你直接 select id from collect where vtype=1 limit 1000,10; 是很快的,基本上0.05秒,可是提高90倍,從9萬開始,那就是0.05*90=4.5秒的速度了。分表的方法:建一個索引表: t (id,title,vtype) 并設(shè)置成定長,然后做分頁,分頁出結(jié)果再到 collect 里面去找info 。 是否可行呢?實驗下就知道了。10萬條記錄到 t(id,title,vtype) 里,數(shù)據(jù)表大小20M左右。用select id from t where vtype=1 order by id limit 90000,10; 很快了。基本上0.1-0.2秒可以跑完。其實這樣做還是全表掃描,只是因為數(shù)據(jù)量小,只有10萬才快。OK, 來個瘋狂的實驗,加到100萬條,測試性能。加了10倍的數(shù)據(jù),馬上t表就到了200多M,而且是定長。還是剛才的查詢語句,時間是0.1-0.2秒完成!分表性能沒問題?錯!因為我們的limit還是9萬,所以快。給個大的,90萬開始select id from t where vtype=1 order by id limit 900000,10; 看看結(jié)果,時間是1-2秒!怪不得有人說 discuz到了100萬條記錄就會很慢,我相信這是真的,這個和數(shù)據(jù)庫設(shè)計有關(guān)!開始測試結(jié)論是: 30萬數(shù)據(jù),用分表法可行,超過30萬他的速度會慢道你無法忍受!當(dāng)然如果用分表+我這種方法,那是絕對完美的。但是用了我這種方法后,不用分表也可以完美解決!不分表的方法:復(fù)合索引!search(vtype,id) 這樣的索引select id from collect where vtype=1 limit 90000,10; 非常快!0.04秒完成!再測試: select id ,title from collect where vtype=1 limit 90000,10; 非常遺憾,8-9秒,沒走search索引!再測試:search(id,vtype),還是select id 這個語句,也非常遺憾,0.5秒。綜上:如果對于有where 條件,又想走索引用limit的,必須設(shè)計一個索引,將where 放第一位,limit用到的主鍵放第2位,而且只能select 主鍵!http://blog.csdn.net/zqtsx/article/details/8929625
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 北海市| 当阳市| 大方县| 安西县| 东兴市| 太保市| 屯留县| 龙山县| 香格里拉县| 比如县| 龙胜| 托克逊县| 栖霞市| 天全县| 乐陵市| 沐川县| 株洲县| 高雄县| 安徽省| 漾濞| 大英县| 遂平县| 阿尔山市| 福建省| 八宿县| 景洪市| 灵川县| 鄂托克旗| 田阳县| 兖州市| 富源县| 加查县| 鄄城县| 来安县| 措勤县| 巢湖市| 襄城县| 株洲县| 瑞安市| 营山县| 台山市|