我需要允许用户通过标题中的第一个字母浏览一个包含> 100万条目的表格。
我希望他们能够通过A-Z中的每个字母,列表中的0-9以及所有其他字符一起浏览。
由于它是一个大型数据库并且要在网站上显示,我需要它才能高效。正则表达式不使用索引,因此速度太慢。
这可能还是我必须重新考虑设计?
提前致谢
答案 0 :(得分:1)
只要“标题”上有索引,您就应该能够使用类似SQL的索引
select *
from myTable
where Title like 'A%'
(或'B%','C%'......)
答案 1 :(得分:0)
创建代表每个字母和数字的链接。单击这些链接将为用户提供以所选字符开头的数据库结果。
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC;
考虑将这些结果页面分页到适当的块中。 MySQL将允许您使用LIMIT
此命令将从所需的字符组中选择前100条记录:
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 0, 100;
此命令将从所需的字符组中选择第二个100条记录:
SELECT title FROM table
WHERE LEFT(title,1) = ?Char
ORDER BY title ASC
LIMIT 100, 100;
根据您的评论,如果您想使用正则表达式组合字符0-9 而不使用,则需要合并多个OR
语句:
SELECT title FROM table
WHERE (
LEFT(title,1) = '0'
OR LEFT(title,1) = '1'
...
)
ORDER BY title ASC;