【问题标题】:MySQL/PHP | Is a 26 character string ( letters and dashes ) too long for indexed columns?MySQL/PHP |对于索引列,26 个字符的字符串(字母和破折号)是否太长?
【发布时间】:2020-05-26 05:12:38
【问题描述】:

我想这样设置我的网站 url 路径:

http://example.com/categories/a-specific-theme-or-subject/1

并使用 PHP 像这样选择所有页面:

SELECT * FROM table WHERE category = 'a-specific-theme-or-subject'

但我想知道,这是一种好的做法,还是会对从数据库中提取数据的速度产生负面影响 - 与使用更简单的单词相比:

http://example.com/categories/subject/1

SELECT * FROM table WHERE category = 'subject'

VARCHAR 列允许包含 255 个字符,但我认为实际使用的数字越低越好,但多少才算太多?

对于任何完整的类别名称 (a-specific-theme-or-subject),我将使用不超过 26 个字符。

【问题讨论】:

  • 索引使用 b-trees,它们对此非常有效。 26 个字符就可以了。
  • 刚刚看过 B-Trees,我不会假装我理解它们是什么或做什么,但是谢谢 - 值得进一步研究。很高兴知道 26 是一个可接受的数字。
  • 除非你真的遇到性能问题,否则不要担心这样的微优化。
  • 没错,但是,正如他们所说,预防胜于治疗。
  • @wsix (love of) '过早的优化是万恶之源'

标签: php mysql database indexing where-clause


【解决方案1】:

简短回答:别担心。

长答案:

索引列可以有多长的硬限制是 191 或 255 或 767 或 3072 字节或一些中间值,具体取决于 MySQL 版本和CHARACTER SET。

实际上,“不用担心”是多久的实际限制。

索引较短的列略比长列好,但是切换到较长列的开销可能比简单地使用应用程序需要的更糟糕。 p>

category VARCHAR(26) 很好;别担心。你可以制作 ascii 或 latin1 或 utf8 或 utf8mb4。 (这 26 个 字符 的最大值分别为 26、26、78、104 字节。)

设计一个好的索引最重要的是根据查询对其进行定制。 WHERE category = 'subject' 准确调用 INDEX(category)。

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2018-11-21
    • 2017-08-08
    • 2011-09-23
    相关资源
    最近更新 更多