首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql多行索引

Mysql多行索引
EN

Stack Overflow用户
提问于 2011-01-27 01:25:42
回答 2查看 301关注 0票数 0

我在mysql中有一个查询。

代码语言:javascript
复制
SELECT
    *
FROM
    Accounts AS a
WHERE
    ('s' IS NULL OR (a.FirstName LIKE CONCAT('s','%') OR
                      a.LastName LIKE CONCAT('s','%') OR
                      a.FullName LIKE CONCAT('s','%')
                     )
    )

我应该如何为表放置索引?

附注:“%s”实际上是存储的proc中的一个变量,因此“%s”为NULL,并且必须连接。

EN

回答 2

Stack Overflow用户

发布于 2011-01-27 01:32:20

首先,给你一个简短的建议:如果没有必要,不要使用concat。您的查询可以重写,因为('s' is NULL)始终为FALSE,所以无论如何您都可以根据第二个条件获取所有行:

代码语言:javascript
复制
SELECT
    *
FROM
    Accounts AS a
WHERE
    a.FirstName LIKE 's%' OR
    a.LastName LIKE 's%' OR
    a.FullName LIKE 's%'

可能会帮助的索引,但不一定会:

代码语言:javascript
复制
create index idx_01 on accounts(FirstName);
create index idx_01 on accounts(LastName);
create index idx_01 on accounts(FullName);

您还可以考虑为表创建全文搜索索引。

票数 1
EN

Stack Overflow用户

发布于 2011-01-27 01:33:30

对于您来说,full text indexing也是一种选择

为3个字段添加全文索引,然后

使用

MATCH() AGAINST()语法

例如

代码语言:javascript
复制
 SELECT * FROM articles WHERE MATCH (title,body)
 AGAINST ('superb catch' IN BOOLEAN MODE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4807715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档