什么是最有效的MySQL查询来查找以数字开头的所有条目?

时间:2011-03-14 00:04:59

标签: mysql performance

在包含超过100万条目的数据库中,有时我们需要查找列号name以数字开头的所有行。

这是目前正在使用的,但似乎可能有更有效的方式来做到这一点。

SELECT * FROM mytable WHERE name LIKE '0%' OR name LIKE '1%' OR name ...

等...

有什么建议吗?

5 个答案:

答案 0 :(得分:6)

从表中选择*,其中your_field regexp'^ [0-9]'

答案 1 :(得分:3)

嘿 您应该在db中的字段中添加长度为1的索引。然后查询会明显加快。

ALTER TABLE `database`.`table` ADD INDEX `indexName` ( `column` ( 1 ) )

菲利克斯

答案 2 :(得分:1)

我的猜测是桌子上的索引没有被有效使用(如果有的话) 由于这是某种类型的char字段,如果这是此表的主要查询,您可以重构索引(我的mysql知识在这里有点简短,有人帮忙)这样这个表是有序的(聚簇索引)在ms sql)这个字段,因此你可以说像

select * from mytable where name < char(57) and name > char(47)  

在那里进行一些测试,我不是100%关于mysql如何对这些角色进行排名的细节,但这应该让你顺利。

另一种选择是让一个新列在“starts_with_number”上给你一个真/假。您可以设置触发器来填充该列。这可能会产生最佳和最可预测的结果。

答案 3 :(得分:0)

我在想......

SELECT * FROM myTable WHERE IF( LEFT( name, 1) = '#', 1,0)

答案 4 :(得分:0)

如果你实际上没有使用返回的行中的每个字段,并且你真的想要从这个查询中榨取每一滴效率,那么不要使用select *,而是只指定你想要的字段处理。