繁体   English   中英

PHP + MySQL:在某些字段中查找包含字符串“ ABC”的所有行

[英]php + mysql: finding all rows that contain string “ABC” in some field

我对这个东西还比较陌生,所以请原谅如果问题是转储。 假设一个表包含以下字段:id,str_field。 str_field的值类似于“ 12:17:1246:90”。 我想获取str_field包含例如“ 17”的所有行。 为此,我需要执行以下命令

SELECT id FROM `table_name` WHERE INSTR(str_field, '17')>0

如果表中有很多行,查询可能会很慢。 问题是:如果我将索引str_field,它将增加查询执行的速度吗?

先感谢您!

PS 换句话说,我要问的是:索引是否会增加查询的速度?

SELECT * FROM `table_name` WHERE str_field='value'

UPD str_field仅包含用冒号分隔的数字。

如果表中有很多行,查询可能会很慢。 问题是:如果我将索引str_field,它将增加查询执行的速度吗?

不多。 如果表中还有许多其他列,则可以在使用的列上建立覆盖索引: (id, str_field) 这将稍快一些,因为索引将小于原始表,因此可以更快地读取。 但是,仍然需要对索引进行全面扫描(而不是对整个表进行全面扫描)。

但是除此之外,您可以使用一种称为三态的方法,通过使用带有三列的单独表来存储单独的整数来提高查询速度。

parent   sortorder   value
1        1           12
1        2           17
1        3           1246
1        4           90

查询如下:

SELECT parent AS id
FROM table_values
WHERE `value` = 17

然后,您可以为此表在(value, parent)上添加索引,这将加快查询速度。 请注意,此查询不需要sortorder列。 如果您认为自己将永远不需要它,则无需在表中包括此列。

您可以创建全文索引并使用特殊的MATCH功能: http : //dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

尽管如此,搜索值而不是表达式要快得多……

索引可以提高性能,这是事实。

如果您的字段包含12:17:1246:90类的字符串数据,则可以使用查询

SELECT id FROM `table_name` WHERE `str_field` LIKE '%17%';

%是百搭字符,表示一个或多个字符

暂无
暂无

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

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