我目前正在构建一个包含多个网页的网站,为了美化网站的网址,我使用http://mydomain.com/category/item-name
我正在使用MySQL表,所以为了从我的MySQL中获取当前项目,我有两个选择:
1)将项目的ID添加到标题:http://mydomain.com/category/28745/item-name
(其中28745
是表中的ID)。这样我就可以运行查询SELECT * FROM products WHERE ID=28745
。简单的方法,但问题是URL有点丑陋。
2)使用文本搜索获取项目。在这种情况下,我会将项目名称用作FULLTEXT
(使用MyISAM
),因此查询将为SELECT * FROM products WHERE item-name=some-text
。
我试图找出第二种方法是否存在任何缺点。在FULLTEXT
字段中使用INT
代替索引会不会影响性能?如果URL由ID组成并且有点丑陋,搜索引擎真的很重要吗?
谢谢,
梅尔
答案 0 :(得分:2)
你不需要FULLTEXT索引,这是第一件事。 FULLTEXT索引是用于搜索文本数据库的索引。你正在做的是完全匹配,你不是在搜索条目。
那就是说,将文本列上的索引放在整数1上有什么缺点?
首先是尺寸。整数需要较少的存储空间。他们的索引需要更少的存储空间为了存储整数,您需要4个字节(2 ^ 32是范围)。要存储单个ASCII字符,您需要1个字节。因此,一个包含4个以上字母的单词占用的空间将超过45亿个。
第二件事是,你不得不使用MyISAM,如果你想拥有某种原因全文索引。 有超过InnoDB的优势和MyISAM的缺点,这是这里良好的覆盖,在SO的话题。
在短期 - 除非你有100K +的类别和增长,除非你需要为你的类别高级搜索选项 - 不使用全文索引,使用普通的一个。 表引擎由您决定。 对于少量数据,它将毫无问题地工作。
答案 1 :(得分:0)
字符串搜索确实会影响性能,但拥有友好名称对搜索引擎也很重要,并且在共享时对用户更具描述性。在数据库中的item-name字段上使用index可以加快搜索速度。
答案 2 :(得分:0)
也许在您的地址中使用日期而不是ID更清洁?
修改强>
如果这只是产品,我认为将它们显示为第二种方法的文本更好,因为您可能在类别中有唯一的产品名称?如果不是这种情况,您可以在地址中添加ID:
http://mydomain.com/category/normal-item
http://mydomain.com/category/item-that-appears-multiple-times/1
http://mydomain.com/category/item-that-appears-multiple-times/2
http://mydomain.com/category/item-that-appears-multiple-times/3
答案 3 :(得分:0)
我建议将pagenumber放在一个单独的字段中 忘记使用全文索引。
让你的桌子像这样:
TableURL
pageid integer autoincrement primary key
url varchar(1000)
pagetext text
现在您可以通过执行以下操作来检索网址:
$pageid = mysql_real_escape_string(.....);
....
SELECT pagetext from tableurl where pageid = '$pageid'
这将使您的搜索速度更快,加快插入速度并保持数据库设计的清洁,并防止检索重复的结果。