繁体   English   中英

来自字段结尾的部分MySQL索引

[英]Partial MySQL index from End of Field

部分索引有助于使索引更小,并使INSERT更快。

例如

  CREATE TABLE wine (
    name VARCHAR(100),
    ...
    INDEX (name(8)));

虽然名字有点像

Chateau Mouton-Rothschild
  Chateau Mouton-Cadet
  Chateau Petrus
  Chateau Lafite
  Chateau Lafleur
  ...

在此(示例)列表中, Chateau始终出现,MySQL基于前8个字符创建索引...意味着索引中将只有一个条目( Chateau Petrus的搜索将按顺序对所有Chateau )。
(在这种情况下,将第一个单词( Chateau )和名称的其余部分在两个字段中分开是有意义的,但这不是重点。

有没有办法让MySQL根据字段的结尾创建部分索引?

实际上,我与此同时找到了一种方法-进行了一些编程:

仅用于name字段

  • 所有name条目都反向存储在数据库中
  • 所有name搜索都被反向
  • 在发送给客户端(用户代理)之前,行中的name颠倒了

例如在PHP中

  • ...query('INSERT ... name="' . strrev($name) . '"...
  • ...query('SELECT * FROM wine WHERE name="' . strrev($name) . '"');
  • 和例如搜索的%MOUTON%实际上将搜索%NOTUOM%

有一些reverse开销,但是与可能的数据库增益相比可以忽略不计。

问题是专门要求使用纯MySQL解决方案,但是如果没有解决方案,那么这是任何语言的可行解决方案。 如果没有更好的办法,我将在几天后接受这个答案。

除了上面提到的解决方案之外,MySQL中唯一的解决方案是显式存储要索引的值。 (例如,没有Chateau name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM