有此表:
CREATE TABLE `example` (
`id` int(11) unsigned NOT NULL auto_increment,
`keywords` varchar(200) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
我们想优化以下查询:
SELECT id FROM example WHERE keywords LIKE '%whatever%'
该表是InnoDB,(因此暂时没有FULLTEXT),这将是优化此类查询的最佳索引?
我们尝试了一个简单的方法:
ALTER TABLE `example` ADD INDEX `idxSearch` (`keywords`);
但是一个解释性查询表明, 如果我们的查询在“像%%”这样的地方查询,则需要扫描 整个表 ,该索引表现良好,但否则就没有价值。
无论如何,有没有为innoDB优化呢?
谢谢!
索引是从字符串的开头到结尾建立的。使用LIKE 'whatever%'
type子句时,MySQL可以使用那些基于开始的索引来whatever
快速查找。
但是切换到LIKE '%whatever%'
会删除字符串开头的锚点。现在,无法使用基于开始的索引,因为您的搜索词不再锚定在字符串的开头-它“浮动”在中间的某个位置,必须搜索整个字段。任何LIKE '%...
查询都不能使用索引。
这就是为什么如果您所做的只是“浮动”搜索,就使用全文索引的原因,因为它们是针对此类使用而设计的。
需要特别注意的是:从5.6.4版本开始,InnoDB现在支持全文索引。因此,除非您不能升级到至少5.6.4,否则您将无法使用InnoDB * 和
全文本搜索。
本文向大家介绍浅谈MyISAM 和 InnoDB 的区别与优化,包括了浅谈MyISAM 和 InnoDB 的区别与优化的使用技巧和注意事项,需要的朋友参考一下 MyISAM 和 InnoDB 的基本区别 1.InnoDB不支持FULLTEXT类型的索引。 2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算
问题内容: 我希望从我的用户模型中检索一些信息,如下所示: 在主页中,我有一个 位置 过滤器,您可以在其中浏览来自国家或城市的用户。 所有字段还包含其中的用户数: 在主页上,然后我还有“学生和老师”页面,我希望仅提供有关这些国家和城市有多少老师的信息… 我想做的是创建一个对MongoDB的查询,以通过单个查询检索所有这些信息。 此刻查询如下: 问题是我不知道如何获取所需的所有信息。 我不知道如何获
问题内容: 此查询需要153秒才能运行。中有数百万行。 我认为查询要花很长时间,因为where子句中的功能。但是,我需要在列上执行ltrim rtrim,而且日期也必须在格式上匹配。如何优化此查询? 说明计划: 首要的关键: 索引: 但是,在解释计划中,我看不到使用索引/主键。那是问题吗? 问题答案: 试试这个: 如果尚无时间,请从其外观(出生日期?)上删除该对象。除此之外,您还需要一些索引工作。
主要内容:概述,一、关联查询优化,1.左(右)外连接,2.内连接,3.JOIN语句原理,4.JOIN小结,5.Hash Join,二、子查询优化,三、排序优化,四、GROUP BY优化,五、优先考虑覆盖索引,六、使用前缀索引,七、索引下推ICP,八、其他查询优化,1.COUNT(*)与COUNT(具体字段)效率,2.不使用SELECT *,3.LIMIT 1优化,4.多使用commit概述 数据库调优的方式有多种: 建立索引、充分利用到索引、不让索引失效 对SQL语句进行优化 调优如缓冲、线程数
我有一个Spark作业,它使用以下分组查询。我知道group by是邪恶的,但在我的用例中我无法避免它。我尝试使用数据帧和hiveContext来使用它。sql()但这两种方法都会洗牌大量数据,而且速度非常慢:一个查询大约需要5分钟。我曾看到一组按阶段执行20 GB的随机读取和10 GB的随机写入。我有大约8个字段按字段分组传入 或 我已经尝试了几乎所有的调谐参数,如钨丝、lz4等。洗牌memor
问题内容: 我有一个小而狭窄的InnoDB表,大约有900万条记录。在桌子上或桌子上做的速度非常慢(超过6秒): 虽然该语句不是运行得太频繁,但对其进行优化将是不错的选择。根据http://www.cloudspace.com/blog/2009/08/06/fast- mysql-innodb-count-really- fast/, 这可以通过强制InnoDB使用索引来实现: 解释计划似乎很好