|
|
我有一個很大的數據庫,200萬條左右,500m左右.
|
|
我有一個很大的mysql數據庫,200萬條左右,500m左右.查詢開了很慢,不知道我該怎麼辦,各位大俠幫忙.
思想+思想=多個思想
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
通常是:
1,建索引
2,優化查詢
3,分析系統瓶頸,相應提高硬件能力
5,在保持大綱不動的前提下減少數據冗余
6,優化表大綱,改進應用,最大限度的壓縮數據冗余
上面第四條是最辛苦的(一般人很少用,估計只有類似google那樣的用戶採用,但效果很好)
另外就是200萬條真不算什麼,這裡有位朋友的都億條以上了。:-)
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
在oracle裡頭
|
|
可以trace查詢動作,看時間花在什麼地方
比如
explain plan for select **** from xxxx where ......
一般來說,需要調整的application 先
whopawho
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
查詢很慢,你的查詢沒有用索引吧?我的表光記錄都400M條記錄查詢都很快啊?
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
我用的是mysql,內存512,cpu:p3 800
思想+思想=多個思想
|
|
|
Re: 在oracle裡頭
|
|
如果買oracle的話需要多少錢.
思想+思想=多個思想
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
硬件還是不錯的,和這個網站的服務器一樣了,所以我覺得是應用的問題(我想這個網站的記錄數一定比你的數據庫多:)
那麼能否貼出你的庫表結構/大綱,貼出
你的常用查詢呢?
這樣大家就可以幫助你分析分析了。
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
id | int(10) unsigned | | PRI | 0 | auto_increment |
| account | varchar(10) | YES | | NULL | |
| password | varchar(8) | YES | | NULL | |
| company | varchar(100) | YES | | NULL | |
| country | varchar(10) | YES | | NULL | |
| province | varchar(10) | YES | | NULL | |
| city | varchar(10) | YES | | NULL | |
| cate | varchar(50) | YES | | NULL | |
| contact | varchar(30) | YES | | NULL | |
| phone | varchar(30) | YES | | NULL | |
| fax | varchar(20) | YES | | NULL | |
| address | varchar(100) | YES | | NULL | |
| code | varchar(10) | YES | | NULL | |
| email | varchar(60) | YES | | NULL | |
| url | varchar(60) | YES | | NULL | |
| introduce | text | YES | | NULL | |
| product | text | YES | | NULL | |
| registertime | datetime | YES | | NULL | |
| shenhe | char(1) | | | 0 | |
| do | varchar(6) | | | 1 | |
| image1 | varchar(100) | YES | | NULL | |
| image2 | varchar(100) | YES | | NULL | |
| shenhee | char(1) | YES | | 0 | |
select * from table where id='$id'
思想+思想=多個思想
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
PRI 是主鍵的意思吧?主鍵應該是有索引的,那的查詢應該使用索引,性能不應該
壞呀?有熟悉mysql的朋友麼?能否核實一下我的說法?
然後就要問你的系統負荷有多大了?
正常有多少並發用戶?現在這樣的查詢速度(時間)是多少?你的期望是多少?
哦,對了! int(10)是什麼意思?你的主鍵是一個integer 的十個元素的數組?為什麼這麼用?似乎 int 才是正確的吧?如果是數組,那我認為索引肯定有問題。
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
我想你的查詢語句有問題。
|
|
你可以試著把select *替換成select字段列表。
在select 中加*是最慢的查詢語法之一。
我後來到他的家鄉,其實那裡根本沒有桃花,只有叫桃花的人
其實人都是這樣,一旦看到山,就想知道山那邊是什麼
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
對,pri是主鍵的意思,int(10)是長度是10個的整形,我現在開始懷疑mysql的性能,我看你們都是PostgreSQL的高手,不知能否介紹一點這方面的東西,他的最大的負載已經測試過的.
思想+思想=多個思想
|
|
|
Re: 我想你的查詢語句有問題。
|
|
select * 和 select field 差距不會太大。
主要是有無條件,以及條件是否使用索引。
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
mysql的性能還是不錯的.查詢慢的原因大概在於索引的建立和你的查詢語句是否用到索引。
我曾做過試驗800萬記錄的一張表不建立索引查詢一條記錄耗時35秒。建立索引後僅僅1秒左右。可見索引對查詢性能影響之大。我測試的機器為pII266,128m
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
我想你把 int(10) 換成 int 會好很多。
我估計原因就在這裡。實在想不出來為什麼
用 int(10),你要明白,int(10) != 10倍int的
數值範圍!!!它只是表明可以存儲10個
整數而已,相當與一個數組,而在一個數組
上建索引,其效果肯定有問題。實際上,在
我的postgresql裡就根本不能用int(10)!
你可以試驗一下。不知道有沒有熟悉mysql的朋友能解釋解釋這個 int(10)。
PostgreSQL 要調整還是比較容易的,首先有一個 explain 可以觀察查詢計劃,另外文檔裡也有好多可以控制的參數說明(mysql也有)。從SQL的角度講,應該沒有太多區別。
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
檢查一下 索引是否存在
|
|
即使存在,也建議重建 索引
照道理,不可能這麼差的,主鍵 檢索都這麼慢.......
另外,你可以測試一下,給某個字段(int型) 作 查詢條件,看看速度如何,假如速度不錯,那可能就是 int(10)的問題?
偶也對int(10)不懂,當初設計數據庫表的人 該打pp
whopawho
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
int(10) 不是表示數組的意思。10表示最大的顯示尺寸。最大的合法的顯示尺寸是 255 。 int(10)是可選的一般用 int即可
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
哦,明白了。
那麼這位朋友就該檢查該主鍵索引是否存在了,這件事應該怎麼做?
========================
www.cmpp.net
小馬,你在信裡可不是這麼說的.
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
管它是否存在,先用myisamchk -rq修一下這個表。可能不是單純查詢的問題,光查詢肯定不應該有問題,可能他的應用同時有大量的並發寫操作在這個表上面。還是請這位網友詳細介紹一下應用的情況,此外運行查詢時用
mysqladmin proc stat看看到底查詢處於什麼狀態,是否給locked了?還有就是explain一下,是不是索引出什麼問題了。
|
|
|
非常感謝大家的幫忙!!!!
|
|
非常感謝大家的踴躍回答,我對具體的語句,數據庫作了一點的優化,建了索引,現在速度提高了很多,原來40秒打開的頁面,現在2秒,主要還是大家的幫忙,在此深表感謝.
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
以前沒有接觸過這麼大的庫,沒這方面的經驗,現在我發現再好的數據庫系統,如果不做很好的優化,也是沒用的.
|
|
|
呵呵,數據庫不論在什麼情況下都不會比單純數據文件快
|
|
只要兩者使用相同的技巧。數據庫的優點在於
為人類利用計算機提供了又一次接近人類思維
的抽像,它和數據文件的關係就像C和ASM之間的關係。
以前一個朋友要做大型快速數據檢索應用,
聊起來後我說,這樣的東西用數據文件肯定是最快的,因為過荷最少,但是,這樣的東西也失去
了為更多人使用的機會,失去了站在巨人肩膀上爬得更高的機會。
|
|
|
你告訴我你是怎麼建的索引的麼?
|
|
|
|
|
Re: 你告訴我你是怎麼建的索引的麼?
|
|
可能是
CREATE INDEX idx_name ON table_name (id);
之類的東西,主要就是那些在where子句裡用的
字段。
|
|
|
Re: 你告訴我你是怎麼建的索引的麼?
|
|
alter table table-name add index 名字(字段名)
|
|
|
Re: 我有一個很大的數據庫,200萬條左右,500m左右.
|
|
哈哈,告訴你一天增加30萬條記錄,一個月有多少記錄?
還是用Oracle吧。優化是最重要的!
|