php + mysql:在某些字段中查找包含字符串"ABC"的所有行

Eug*_*y89 1 php mysql indexing

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

SELECT id FROM `table_name` WHERE INSTR(str_field, '17')>0
Run Code Online (Sandbox Code Playgroud)

如果表中有大量行,则查询可能很慢.这是一个问题:如果我将索引str_field,它会增加查询执行的速度吗?

先感谢您!

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

SELECT * FROM `table_name` WHERE str_field='value'
Run Code Online (Sandbox Code Playgroud)

UPD str_field仅包含以冒号分隔的数字.

Mar*_*ers 5

如果表中有大量行,则查询可能很慢.这是一个问题:如果我将索引str_field,它会增加查询执行的速度吗?

不多.如果表中有许多其他列,那么您可以在使用的列上创建覆盖索引:(id, str_field).这将稍微快一点,因为索引将小于原始表,因此可以更快地读取.但是,它仍然需要完整扫描索引(而不是整个表的完整扫描).

但除此之外,您可以使用称为非规范化的方法,通过使用具有三列的单独表来存储单独的整数来提高查询的速度.

parent   sortorder   value
1        1           12
1        2           17
1        3           1246
1        4           90
Run Code Online (Sandbox Code Playgroud)

查询如下:

SELECT parent AS id
FROM table_values
WHERE `value` = 17
Run Code Online (Sandbox Code Playgroud)

然后,您可以(value, parent)为此表添加索引,这将加快查询速度.请注意,sortorder此查询不需要该列.如果您认为自己不需要它,那么您不需要在表格中包含此列.