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仅包含以冒号分隔的数字.
如果表中有大量行,则查询可能很慢.这是一个问题:如果我将索引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此查询不需要该列.如果您认为自己不需要它,那么您不需要在表格中包含此列.
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |