作家
登录

MySQL的前缀索引及Oracle的类似实现

作者: 来源: 2018-01-19 08:54:27 阅读 我要评论

年前最后一场技巧盛宴 | 1月27日与京东、日记易技巧大年夜咖畅聊智能化运维成长趋势!


MySQL的前缀索引及Oracle的类似实现

其实,Oracle也有类似的实现,对于文本,它可以经由过程substr的函数索引,实现同样甚至更多的功能。别的,经由摸索,我们发明,本来数字和时光字段,在Oracle也可以实现类似的功能。

有兴趣的,可以做个10053。Oracle内部实际进行履行筹划解析的,就是如许一个SQL。

MySQL的前缀索引

MySQL的前缀索引指的是对指定的栏位的前面几位建立的索引。

  1. Altertable Table_Name add key(column_name(prefix_len)); 

或者

  1. Createindex index_name on Table_Name(column_name(prefix_len)); 

建立前缀索引后,可以直接当做通俗索引进行过滤。

MySQL有一个很有意思的索引类型,叫做前缀索引,它可以给某个文本字段的前面部分零丁做索引,大年夜而降低索引的大年夜小。

  1. Select ..from table_name where column_name=’…’; 

前缀索引的最大年夜的好处是降低索引的大年夜小。别的,因为InnoDB单列索引长度不克不及跨越767bytes,如不雅是text或者blob字段,直接建立索引可能会报错,而前缀索引可以绕过这一限制。

  1. mysql> alter table test_prefix_ind add key(text_str); 
  2.  
  3. ERROR 1170 (42000): BLOB/TEXT column 'text_str' used in key specification without a key length 
  4.  
  5. mysql> alter table test_prefix_ind add key(blob_str);; 
  6.  
  7. ERROR 1170 (42000): BLOB/TEXT column 'blob_str' used in key specification without a key length  

做个测试看一下。

  1. delimiter;; 
  2.  
  3. dropFUNCTION if exists random_str;; 
  4.  
  5. CREATEFUNCTION random_str(n intRETURNS varchar(30000)   
  6.  
  7. begin          
  8.  
  9. declarereturn_str varchar(30000) default "";          
  10.  
  11. declare iint default 0;  
  12.  
  13. whilelength(return_str) < n do          
  14.  
  15. setreturn_str=concat(return_str,md5(rand()));  
  16.  
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      Memory Cleaner——简单好用的Windows内存优化工具

    年前最后一场技巧盛宴 | 1月27日与京东、日记易技巧大年夜咖畅聊智能化运维成长趋势!Windows 操作体系在没有效户干涉的情况下可以相当有效地治理计算机内存的应用情况,但不是说就没有可以优化和改进的>>>详细阅读


    本文标题:MySQL的前缀索引及Oracle的类似实现

    地址:http://www.17bianji.com/lsqh/40347.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)