程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 添加mysql索引的3條原則

添加mysql索引的3條原則

編輯:MySQL綜合教程

  一,索引的重要性

  索引用於快速找出在某個列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數據文件的中間,沒有必要看所有數據。注意如果你需要訪問大部分行,順序讀取要快得多,因為此時我們避免磁盤搜索。

  假如你用新華字典來查找“張”這個漢字,不使用目錄的話,你可能要從新華字典的第一頁找到最後一頁,可能要花二個小時。字典越厚呢,你花的時間就越多。現在你使用目錄來查找“張”這個漢字,張的首字母是z,z開頭的漢字從900多頁開始,有了這條線索,你查找一個漢字可能只要一分鐘,由此可見索引的重要性。但是索引建的是不是越多越好呢,當然不是,如果一本書的目錄分成好幾級的話,我想你也會暈的。

  二,准備工作

  1. //准備二張測試表     
  2. mysql> CREATE TABLE `test_t` (     
  3.  ->   `id` int(11) NOT NULL auto_increment,     
  4.  ->   `num` int(11) NOT NULL default 0,     
  5.  ->   `d_num` varchar(30) NOT NULL default 0,     
  6.  ->   PRIMARY KEY  (`id`)     
  7.  -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;     
  8. Query OK, 0 rows affected (0.05 sec)     
  9.     
  10. mysql> CREATE TABLE `test_test` (     
  11.  ->   `id` int(11) NOT NULL auto_increment,     
  12.  ->   `num` int(11) NOT NULL default 0,     
  13.  ->   PRIMARY KEY  (`id`)     
  14.  -> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;     
  15. Query OK, 0 rows affected (0.05 sec)       
  16.     
  17. //創建一個存儲過程,為插數據方便     
  18. mysql> delimiter |     
  19. mysql> create procedure i_test(pa int(11),tab varchar(30))     
  20.  -> begin     
  21.  ->     declare max_num int(11) default 100000;     
  22.  ->     declare i int default 0;     
  23.  ->     declare rand_num int;     
  24.  ->  declare double_num char;     
  25.  ->     
  26.  ->  if tab != test_test then     
  27.  ->         select count(id) into max_num from test_t;     
  28.  ->         while i < pa do    
  29.  ->             if max_num < 100000 then     
  30.  ->                 select cast(rand()*100 as unsigned) into rand_num;     
  31.  ->                 select concat(rand_num,rand_num) into double_num;     
  32.  ->                 insert into test_t(num,d_num)values(rand_num,double_num);     
  33.  ->             end if;     
  34.  ->             set i = i +1;     
  35.  ->         end while;     
  36.  ->  else    
  37.  ->         select count(id) into max_num from test_test;     
  38.  ->         while i < pa do    
  39.  ->             if max_num < 100000 then     
  40.  ->                 select cast(rand()*100 as unsigned) into rand_num;     
  41.  ->                 insert into test_test(num)values(rand_num);     
  42.  ->             end 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved