
[英]Finding a string inside another string [php] — matching all for some reason?
[英]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.