程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MYSQL數據列類型與查詢效率

MYSQL數據列類型與查詢效率

編輯:關於MYSQL數據庫

      數據列類型與查詢效率
選用適當的數據列類型有助於提高查詢命令的執行速度,下面是幾點關於如何選擇合適數據列類型的建議:

盡量選用尺寸較小的數據列。這樣能節約磁盤空間和加快查詢速度。如果較短的數據列上建有索引,則索引的處理速度會進一步提高。

針對數據列類型,盡量選擇最適用的數據表類型。如固定長度數據列在MyISAM或ISAM數據表中的速度是最快的,所以在這樣數據表中盡量使用char類型而不是varchar類型來保存字符串數據。對於InnoDB數據表類型,由於varchar類型可有效減少占用空間,從而減少磁盤I/O,所以使用varchar類型是有利的。對於BDB類型數據表,使用定長和不定長列類型的區別就不大,可任選一種。

盡量把數據列聲明為NOT NULL,以節約存儲空間和加快處理速度。

對於取值范圍有限的數據列,考慮使用ENUM數據列類型。ENUM數據列類型在MySQL中的處理速度是很快。

使用PROCEDURE ANALYSE()語句來分析數據表,它會對數據列的聲明提出建議,我們可根據建議進行修改。

select * from table_name PROCEDURE ANALYSE();
select * from table_name PROCEDURE ANALYSE(16,256);    #(16,256)含義是:如果某列的不同取值在16個以上或長度超過256字節,就不提出使用ENUM的建議。
用OPTIMIZE TABLE語句對容易出現碎片的數據表進行整理。包含可變長數據列的數據表都會產生碎片,從而占用多余的磁盤空間和影響查詢速度。所以要定期運行OPTIMIZE TABLE語句以防止數據表查詢性能降低。但該語句只對MyISAM數據表有效。對各種數據表通用的碎片整理方法是這樣的:先用工具程序MySQLdump導出數據表,再刪除數據表後重建,如:

$ MySQLdump --opt db_name table_name > dump.sql
$ MySQL db_name < dump.sql
把非結構化和變化大的數據放在BLOB數據列裡,定期用OPTIMIZE TABLE命令優化。

人為地給數據表增加一個數據列,以充當索引。做法是這樣的,先根據數據表裡的其它數據列計算出一個散列值,並保存在一個數據列裡,然後通過搜索散列值來檢索數據行。注意,該技巧只適用於精確匹配型查詢。散列值在大於,小於等的操作中不起作用。散列值可以MD5()(適用於3.23及以上版本),SHA1()(適用於4.0.1及以上版本),CRC32()(適用於4.1及以上版本)等函數生成。使用散列值支檢索BLOB和TEXT值的做法比直接檢索BLOB和TEXT本身的做法快。

盡量避免對大尺寸的BLOB值進行檢索。如果要檢索都應該通過它的上面提到散列值先進行篩選。而不應該盲目地在網絡中傳送大量BLOB值。

如果把BLOB值剝離到另外一個數據表裡去,可實現數據表中其它數據列轉變成固定長度數據列的話。就即可減少數據表碎片,又可使在原始表中的select *查詢不會把大尺寸的BLOB值不必要地通過網絡傳送。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved