MySQL/PHP | 26个字符的字符串(字母和破折号)对于索引列是否太长?

MySQL/PHP | 26个字符的字符串(字母和破折号)对于索引列是否太长?,php,mysql,database,indexing,where-clause,Php,Mysql,Database,Indexing,Where Clause,我想这样设置我的网站url路径: http://example.com/categories/a-specific-theme-or-subject/1 并使用PHP选择如下所示的所有页面: 从表中选择*,其中category='a-specific-theme-or-subject' 但我想知道,与使用更简单的单个单词相比,这是一种好的做法,还是会对从数据库中提取数据的速度产生负面影响: http://example.com/categories/subject/1 从类别为“主题”的表格中选

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

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

并使用PHP选择如下所示的所有页面:

从表中选择*,其中category='a-specific-theme-or-subject'

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

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

从类别为“主题”的表格中选择*

一个
VARCHAR
列允许255个字符,但是我假设实际使用的数字越低越好,但是多少个字符太多


任何完整的类别名称(
a-specific-theme-or-subject
)最多只能使用26个字符。

简短回答:别担心

长答覆:

根据MySQL版本和
字符集
,索引列长度的硬限制为191或255或767或3072字节或一些中间值

实际的时间限制是“别担心”

索引较短的列比索引较长的列稍微好一些,但是切换到较长列的开销可能比简单地使用应用程序所需的内容更糟糕

A
类别VARCHAR(26)
可以;别担心。你可以用ascii或拉丁文1,utf8或utf8mb4。(26个字符的最大值分别为26、26、78和104个字节。)


设计一个好的索引最重要的事情是根据查询定制索引
其中category='subject'
精确地调用
索引(category)

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