Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php+;mysql:查找包含字符串“的所有行”;ABC";在某些领域_Php_Mysql_Indexing - Fatal编程技术网

php+;mysql:查找包含字符串“的所有行”;ABC";在某些领域

php+;mysql:查找包含字符串“的所有行”;ABC";在某些领域,php,mysql,indexing,Php,Mysql,Indexing,我对这东西比较陌生,所以如果问题是垃圾,请原谅。假设一个表包含以下字段:id,str\u field。stru字段的值类似于“12:17:1246:90”。我想得到str_字段包含的所有行,例如“17”。为此,我需要执行以下命令 SELECT id FROM `table_name` WHERE INSTR(str_field, '17')>0 如果表中有大量行,查询速度可能会很慢。问题是:如果我对stru字段进行索引,它会增加查询执行的速度吗 提前谢谢你 PS。换句话说,我要问的是:索

我对这东西比较陌生,所以如果问题是垃圾,请原谅。假设一个表包含以下字段:id,str\u field。stru字段的值类似于“12:17:1246:90”。我想得到str_字段包含的所有行,例如“17”。为此,我需要执行以下命令

SELECT id FROM `table_name` WHERE INSTR(str_field, '17')>0
如果表中有大量行,查询速度可能会很慢。问题是:如果我对stru字段进行索引,它会增加查询执行的速度吗

提前谢谢你

PS。换句话说,我要问的是:索引是否会增加以下查询的spead

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


UPDstr\u字段仅包含以冒号分隔的数字。

您可以创建全文索引并使用特殊的匹配功能:


不过,搜索值而不是表达式要快得多…

您可以创建全文索引并使用特殊的匹配功能:

不过,搜索值而不是表达式要快得多

如果表中有大量行,查询速度可能会很慢。问题是:如果我对stru字段进行索引,它会增加查询执行的速度吗

不多。如果表中有许多其他列,则可以对使用的列建立覆盖索引:
(id,stru字段)
。这将稍微快一点,因为索引将比原始表小,因此可以更快地读取。但是,它仍然需要对索引进行完全扫描(而不是对整个表进行完全扫描)

但除此之外,您还可以通过使用一个包含三列的单独表来存储单独的整数来提高查询速度,方法是使用一种名为

这样的查询:

SELECT parent AS id
FROM table_values
WHERE `value` = 17
然后可以在此表的
(值,父项)
上添加索引,这将加快查询速度。请注意,此查询不需要
sortorder
列。如果您认为永远都不需要它,那么就不需要在表中包含此列

如果表中有大量行,查询速度可能会很慢。问题是:如果我对stru字段进行索引,它会增加查询执行的速度吗

不多。如果表中有许多其他列,则可以对使用的列建立覆盖索引:
(id,stru字段)
。这将稍微快一点,因为索引将比原始表小,因此可以更快地读取。但是,它仍然需要对索引进行完全扫描(而不是对整个表进行完全扫描)

但除此之外,您还可以通过使用一个包含三列的单独表来存储单独的整数来提高查询速度,方法是使用一种名为

这样的查询:

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

然后可以在此表的
(值,父项)
上添加索引,这将加快查询速度。请注意,此查询不需要
sortorder
列。如果您认为永远都不需要它,那么就不需要在表中包含此列。

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

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

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

%
是一个小丑字符,表示一个或多个字符。

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

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

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


%
是一个小丑字符,表示一个或多个字符。

该字段是否有固定格式,例如四个用冒号分隔的小数字?或者它可以包含任意文本,包括字母和符号?如果该字段包含“172”,那么“17”是否应该匹配?仅用冒号分隔的数字是否对数字的大小有限制?数字的数量是否有限制?字段是否有固定格式,例如四个小数字之间用冒号分隔?或者它可以包含任意文本,包括字母和符号?如果该字段包含“172”,那么“17”是否应该匹配?仅用冒号分隔的数字是否对数字的大小有限制?数字的数量有限制吗?是的,我知道搜索值的速度更快。。不过,这不是我的情况是的,我知道搜索值更快。。不过,这不是我的情况,
字段中可以有任意数量的冒号,因此我不能将整数存储在单独的列中。她建议将每个整数放在单独的行中,而不是单独的列中。在数据库列中搜索任何类型的分隔数据效率都非常低。
字段中可以有任意数量的冒号,因此我不能将整数存储在单独的列中。她建议将每个整数放在单独的行中,而不是单独的列中。在数据库列中搜索任何类型的分隔数据效率都非常低。它会比使用
INSTR(str_field,'17')>0
更快吗?我想是的,因为
INSTR
返回一个值,搜索的字符串从该值开始,而我运行的语句只检查是否存在。但我认为这两个命令对性能的影响不会太大。我将在本地计算机上尝试一些测试。实际上,该查询将包括
str_field
具有类似
12:4179:1246:90
@Kjir的值的行。就像Eugeny89使用的查询一样。使用
INSTR(str_字段,'17')>0
或像“%17%”这样的
str_字段
在获取结果方面是等效的。是的,但我仍然认为这不是预期的。虽然只有Eugeney89知道真正需要什么…但它会比使用
INSTR(str_field,'17')>0更快吗?我认为是的,因为
INSTR
返回一个值,搜索的字符串从该值开始,而我运行的语句只检查是否存在。但我不认为对性能的影响会有多大