MySQL是不是很贵?

MySQL是不是很贵?,mysql,Mysql,下面的问题是关于选择精确匹配(例如:INT)与使用varchar的“LIKE”匹配之间的速度 有什么不同吗?我问这个问题的主要原因是因为我正试图决定将ID从我当前的项目中删除是否是一个好主意 例如,而不是: http://mysite.com/article/391239/this-is-an-entry 改为: http://mysite.com/article/this-is-an-entry 你认为从长远来看我会遇到性能问题吗?我应该保留身份证吗 注意: 我想使用它让用户更容易记住。例

下面的问题是关于选择精确匹配(例如:INT)与使用varchar的“LIKE”匹配之间的速度

有什么不同吗?我问这个问题的主要原因是因为我正试图决定将ID从我当前的项目中删除是否是一个好主意

例如,而不是:

http://mysite.com/article/391239/this-is-an-entry
改为:

http://mysite.com/article/this-is-an-entry
你认为从长远来看我会遇到性能问题吗?我应该保留身份证吗

注意:


我想使用它让用户更容易记住。例如,如果他们写入“”,它将重定向到正确的


关于页面的数量,假设我在79230左右,而这个应用程序。发展很快。比如说每天有1640个条目

INT比较比string(varchar)比较快。类似的比较甚至更慢,因为它至少涉及一个通配符

从您告诉我们的情况很难判断这在您的应用程序中是否重要。除非它是非常密集的,也就是说,你正在做无数次这样的比较,我会为你的用户提供清晰的信息


还要考虑的另一件事是:用户是否总是要键入URL?或者他们只是打算使用搜索引擎?现在我只是简单地搜索,而不是试图记住一个URL。作为一个用户,这对我来说不是问题。你是什么样的用户?你能从你的应用程序中看出他们是如何访问你的站点的吗?

首先,我认为这两种方式都无关紧要,是的,它会比较慢,因为类似
子句比直接比较需要更多的工作,但是在正常站点上速度可以忽略不计

如果您要测量执行查询所花费的时间,这可以很容易地进行测试,在这个部门有很多方法可以帮助您

要稍微偏离你的问题,你必须问自己是否需要使用类似于
来进行查询,因为“这是一个条目”应该是唯一的,对吗

SELECT id, friendly_url, name, content FROM articles WHERE friendly_url = 'this-is-an-article';

INT要快得多


在字符串的情况下,我认为您不应该选择像
这样的
查询,而应该选择
=
,因为您查找
这是一个条目,而不是
这是一个条目,如果您在varchar字段上放置索引,它应该是正常的(性能方面),这取决于你有多少页。此外,您还必须更加小心,清理字符串以防止sql注入,例如,在查询中只允许a-z、0-9、-、等

我仍然更喜欢整数id,因为它更快更安全,请将格式更改为更好的格式,如:

如前所述,比较INT 有一件事将有助于验证您的查询的速度和意义是。您可以使用它来显示查询使用的索引以及执行时间

为了回答您的问题,如果可以使用文章ID(即INT)上的精确匹配来构建系统,那么它将比使用LIKE语句匹配整个url要“轻巧”得多。LIKE显然会起作用,但我不想在上面运行一个大的、高流量的站点。

一个“SELECT*FROM x WHERE=391239”查询将比“SELECT*FROM x WHERE='some key'”更快,而“SELECT*FROM x WHERE='some key'”查询将比“SELECT*FROM x WHERE='some key%”更快(通配符的存在不会带来很大的不同

快多少?快两倍?-很有可能。快十倍?拉伸但可能。这里真正的问题是1)这有关系吗?2)你是否应该一开始就这样使用

1)这有关系吗 我可能会说不。如果您确实有391239+个独特的文章/页面,并且假设您获得了相当的流量,那么这可能只是您可能遇到的许多扩展问题之一。然而,我保证情况并非如此,因此,在达到一百万零一次之前,你不应该担心一百万次的页面浏览量

2)您是否应该使用LIKE 否。如果页面/文章标题/名称是URL“slug”的一部分,则必须是唯一的。如果不是这样的话,那么你在搜索引擎优化(SEO)方面就是在打击自己,给自己写一个维护噩梦。如果标题/名称是唯一的,那么您可以只使用“WHERE title='some page'”,并确保title列在其上具有唯一的索引

编辑

你计划用LIKE作为URL的地址,这完全是疯了。如果有人来访怎么办

yoursite.com/articles/the
是否返回以“the”开头的所有页面的列表?如果:

作者A创造

yoursite.com/articles/stackoverflow-is-massive
2天后,作者B创建

yoursite.com/articles/stackoverflow-is-massively-flawed
A不仅会因为他的文章被hi-jacked而非常生气,他可能发送的所有perma链接都将被破坏,而且谷歌永远不会给你的文章任何合理的页面排名,因为内容不断变化,并有效地稀释了自己


有时候,有一个很好的理由,你以前从未在其他地方见过你令人惊叹的新“想法/功能/发明/省时”产品。

有几件事需要考虑:

对数据库执行的搜索类型将是“索引搜索”,大多数情况下使用索引搜索单行

使用INT对单行执行这种类型的精确匹配操作的速度并不比使用字符串快多少,实际上它们的成本基本相同

您可以做的是以下优化,使用精确匹配(无通配符)搜索数据库,这与使用int索引一样快。如果没有匹配项,则进行模糊搜索(使用通配符进行搜索)成本更高,但另一方面,这种情况更为罕见,并且可以生成多个结果。如果你想选b,需要一种排名结果的形式