我以前做過一個mysql的項目,需要設計一個快速上載的機制。最后的解決辦法是利用了mysql的預處理語句的特性實現(xiàn)的。mysql的預處理語句支持多行數(shù)據(jù)的預處理,即 insert into (columnName,columnName,...) values(?,?,...)(?,?,..)...。這樣你在綁定輸入?yún)?shù)的時候可以在程序里將整張表的數(shù)據(jù)都綁定好然后調用一次執(zhí)行就能將整張表的數(shù)據(jù)插入,比用mysql_query一行一行插入省的幾倍的時間。不過你一次發(fā)到mysql服務器端的數(shù)據(jù)多的情況下,要設置my.ini文件下的一個配置項,把服務器允許一次發(fā)送的數(shù)據(jù)包的大小調大就行。

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網(wǎng)站、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的易縣網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
1 索引可以先去了 這樣會快點 插入完畢之后再重建索引
2 不要1個insert一條數(shù)據(jù) 可以一條長長的insert 里面包含1000條數(shù)據(jù) 做一次插入操作,這樣快很多
mysql更快。
1、直接讀文件相比數(shù)據(jù)庫查詢效率更勝一籌,而且文中還沒算上連接和斷開的時間。
2、一次讀取的內(nèi)容越大,直接讀文件的優(yōu)勢會越明顯(讀文件時間都是小幅增長,這跟文件存儲的連續(xù)性和簇大小等有關系),這個結果恰恰跟書生預料的相反,說明MYSQL對更大文件讀取可能又附加了某些操作(兩次時間增長了近30%),如果只是單純的賦值轉換應該是差異偏小才對。
3、寫文件和INSERT幾乎不用測試就可以推測出,數(shù)據(jù)庫效率只會更差。
4、很小的配置文件如果不需要使用到數(shù)據(jù)庫特性,更加適合放到獨立文件里存取,無需單獨創(chuàng)建數(shù)據(jù)表或記錄,很大的文件比如圖片、音樂等采用文件存儲更為方便,只把路徑或縮略圖等索引信息放到數(shù)據(jù)庫里更合理一些。
5、PHP上如果只是讀文件,file_get_contents比fopen、fclose更有效率,不包括判斷存在這個函數(shù)時間會少3秒左右。
6、fetch_row和fetch_object應該是從fetch_array轉換而來的,書生沒看過PHP的源碼,單從執(zhí)行上就可以說明fetch_array效率更高,這跟網(wǎng)上的說法似乎相反。
實 際上在做這個試驗之前,從個人經(jīng)驗判斷就有了大概的結果,測試完成后則有種豁然開朗的感覺。假定在程序效率和關鍵過程相當且不計入緩存等措施的條件下,讀 寫任何類型的數(shù)據(jù)都沒有直接操作文件來的快,不論MSYQL過程如何,最后都要到磁盤上去讀這個“文件”(記錄存儲區(qū)等效),所以當然這一切的前提是只讀 內(nèi)容,無關任何排序或查找操作。
MySQL是一個關系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數(shù)據(jù)庫管理系統(tǒng)) 應用軟件之一。
MySQL是一種關系型數(shù)據(jù)庫管理系統(tǒng),關系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。
1.當我們請求mysql服務器的時候,MySQL前端會有一個監(jiān)聽,請求到了之后,服務器得到相關的SQL語句,執(zhí)行之前(虛線部分為執(zhí)行),還會做權限的判斷
2.通過權限之后,SQL就到MySQL內(nèi)部,他會在查詢緩存中,看該SQL有沒有執(zhí)行過,如果有查詢過,則把緩存結果返回,說明在MySQL內(nèi)部,也有一個查詢緩存.但是這個查詢緩存,默認是不開啟的,這個查詢緩存,和我們的Hibernate,Mybatis的查詢緩存是一樣的,因為查詢緩存要求SQL和參數(shù)都要一樣,所以這個命中率是非常低的(沒什么卵用的意思)。
3.如果我們沒有開啟查詢緩存,或者緩存中沒有找到對應的結果,那么就到了解析器,解析器主要對SQL語法進行解析
4.解析結束后就變成一顆解析樹,這個解析樹其實在Hibernate里面也是有的,大家回憶一下,在以前做過Hibernate項目的時候,是不是有個一個antlr.jar。這個就是專門做語法解析的工具.因為在Hibernate里面有HQL,它就是通過這個工具轉換成SQL的,我們編程語言之所以有很多規(guī)范、語法,其實就是為了便于這個解析器解析,這個學過編譯原理的應該知道.
5.得到解析樹之后,不能馬上執(zhí)行,這還需要對這棵樹進行預處理,也就是說,這棵樹,我沒有經(jīng)過任何優(yōu)化的樹,預處理器會這這棵樹進行一些預處理,比如常量放在什么地方,如果有計算的東西,把計算的結果算出來等等...
6.預處理完畢之后,此時得到一棵比較規(guī)范的樹,這棵樹就是要拿去馬上做執(zhí)行的樹,比起之前的那棵樹,這棵得到了一些優(yōu)化
7.查詢優(yōu)化器,是MySQL里面最關鍵的東西,我們寫任何一條SQL,比如SELECT * FROM USER WHERE USERNAME = toby AND PASSWORD = 1,它會怎么去執(zhí)行?它是先執(zhí)行username = toby還是password = 1?每一條SQL的執(zhí)行順序查詢優(yōu)化器就是根據(jù)MySQL對數(shù)據(jù)統(tǒng)計表的一些信息,比如索引,比如表一共有多少數(shù)據(jù),MySQL都是有緩存起來的,在真正執(zhí)行SQL之前,他會根據(jù)自己的這些數(shù)據(jù),進行一個綜合的判定,判斷這一次在多種執(zhí)行方式里面,到底選哪一種執(zhí)行方式,可能運行的最快.這一步是MySQL性能中,最關鍵的核心點,也是我們的優(yōu)化原則.我們平時所講的優(yōu)化SQL,其實說白了,就是想讓查詢優(yōu)化器,按照我們的想法,幫我們選擇最優(yōu)的執(zhí)行方案,因為我們比MySQL更懂我們的數(shù)據(jù).MySQL看數(shù)據(jù),僅僅只是自己收集到的信息,這些信息可能是不準確的,MySQL根據(jù)這些信息選了一個它自認為最優(yōu)的方案,但是這個方案可能和我們想象的不一樣.
8.這里的查詢執(zhí)行計劃,也就是MySQL查詢中的執(zhí)行計劃,比如要先執(zhí)行username = toby還是password = 1
9.這個執(zhí)行計劃會傳給查詢執(zhí)行引擎,執(zhí)行引擎選擇存儲引擎來執(zhí)行這一份傳過來的計劃,到磁盤中的文件中去查詢,這個時候重點來了,影響這個查詢性能最根本的原因是什么?就是硬盤的機械運動,也就是我們平時熟悉的IO,所以一條查詢語句是快還是慢,就是根據(jù)這個時間的IO來確定的.那怎么執(zhí)行IO又是什么來確定的?就是傳過來的這一份執(zhí)行計劃.(優(yōu)化就是制定一個我們認為最快的執(zhí)行方案,最節(jié)省IO,和執(zhí)行最快)
10.如果開了查詢緩存,則返回結果給客戶端,并且查詢緩存也放一份。
mysql里面存儲過程能不用游標就不要用游標。 mysql里面的游標性能是最慢的,oracle或者sqlserver或者db2,游標遍歷數(shù)一次超過10000,性能都會很差的。
而mysql的游標性能比oracle他們來說性能更差了。
存儲過程里面如果很多insert,可以設置一下set autocommit=0; 然后自己控制何時commit。
如果數(shù)據(jù)量大,注意索引。比如select 里面有5W條數(shù)據(jù),又沒有orderdetailid 索引,就會很慢,加了索引之后,整個存儲過程就很快了。
當前題目:mysql怎么存儲快點,mysql數(shù)據(jù)怎么保存
本文網(wǎng)址:http://chinadenli.net/article3/dsgdoos.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、做網(wǎng)站、網(wǎng)站收錄、服務器托管、用戶體驗、品牌網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)