MYSQL

添加mysql索引的3条原则

日期:2015/6/28来源: IT猫扑网

  一,索引的重要性

  索引用于快速找出在某个列中有一特定值的行。不使用索引,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 

相关文章

相关下载

网友评论

我要评论...
    没有更早的评论了
    取消