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

W六

我想像这样设置我的网站 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 个字符

里克·詹姆斯

简短的回答:别担心。

长答案:

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

再一次,“别担心”的实际限制是多长时间。

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

A 没问题category VARCHAR(26)别担心。你可以制作 ascii 或 latin1 或 utf8 或 utf8mb4。(这 26 个字符的最大值分别为 26、26、78、104 个 _bytes。)

设计一个好的索引最重要的是根据查询定制它。WHERE category = 'subject'正好要求INDEX(category).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当字符串有 26 个字符时,为什么 sizeof(str) 8?

索引 26 超出长度 26 的范围

Python | 26个称为az的列表,每个字母带有字符串,选择随机字母,如何选择列表

从第 26 行 Google 脚本中删除每行字符串中的第 7 到 14 个字符

Perl用数字替换26个字符

java中如何验证一个字符串只包含字母、数字、下划线和破折号

如何生成一个26个字符的十六进制字符串,该字符串等于106位和((二进制为(53个1-53个零))

Grep与多个字符串完全匹配,没有破折号

如何测试仅包含字母字符和破折号(-)的字符串[javascript]

Java,确保字符串仅包含字母数字,空格和破折号

如何验证字符串仅包含字母,数字,下划线和破折号?

如何从字符串PHP中分离字母,数字,反底线和破折号

如何在没有空格或破折号的字母串中重复每个字母的字符串连接?

如何从破折号分隔的字符串中返回以完整单词结尾的前 N 个字符?

如果冒号或破折号前面有 2 个字符,如何用空字符串替换它们

Java字符串,从右开始每8个字符后插入一个破折号

如果字符串以带破折号“-”的 8 个字符开头,则插入特定标签

如何用双破折号和/或单破折号匹配字符串?

ASCII字符26应该做什么?

从一串破折号分隔的值中获取一个字符串

正则表达式无法捕获以字母字符开头和结尾并包含破折号的字符串

如何使用Regex匹配字符串仅包含字母数字字符,破折号和下划线

重新分配超过26个字符的文本时核心转储c

返回破折号后跟单个字符

使用DataTemplate和ItemTemplate的数据错误26

Fedora 26和代码块上的Freeglut

Python Selenium 2.39和Firefox 26

捕获超过 1 个单词的字符串并将其转换为由破折号分隔的单个字符串

CS圈编码练习:26个字母