gpt4 book ai didi

sql - MySQL - 索引中有很多列?还是一个接一个?

转载 作者:可可西里 更新时间:2023-11-01 08:00:42 26 4
gpt4 key购买 nike

假设一个产品最多可以有五 (5) 次投诉。在这种情况下,有一个包含五 (5) 列的表。这五个列直接涉及其他表,其中报告要求代码。

参见:http://img263.imageshack.us/img263/4990/01mysql.jpg

从这一刻起,我必须在两个表之间建立关系。那么下面哪种方式创建索引更正确:

a) 逐个创建索引?

ALTER TABLE `complaint` ADD INDEX (`code_01`) 
ALTER TABLE `complaint` ADD INDEX (`code_02`)
ALTER TABLE `complaint` ADD INDEX (`code_03`)
ALTER TABLE `complaint` ADD INDEX (`code_04`)
ALTER TABLE `complaint` ADD INDEX (`code_05`)

b) 所有字段都在一个索引中?

ALTER TABLE `complaint` ADD INDEX (`code_01`, 
`code_02`,
`code_03`,
`code_04`,
`code_05`)

我认为最好的选项是 a),因为如果我选择选项 b) 并通过访问 phpMyAdmin 中的“关系 View ”,它会显示还有其他字段显示“未定义索引!”在 code_02、code_03 和 code_04 code_05 列中。


注意 - 插入和更新:

如果我使用选项 b) 并在 code_02、code_03 和 code_04 code_05 列中输入记录的代码,MySQL 不会提示输入的代码不存在的任何错误。只返回一条成功消息,这应该是不正确的。所以在这种特殊情况下,我必须使用选项 a),对吗?

最佳答案

当你在多个列上建立索引时,只有在你访问最左边的列时才会使用索引。

选项 a 将创建 5 个单独的索引,选项 B 将仅创建 1 个

如果您要按任何列进行搜索或排序,则必须使用选项 A但是,如果您将按索引顺序按列搜索,则使用选项 B

例子

SELECT ID
FROM table
WHERE code_03 = 'asd' OR code_02 = 'asds'

使用选项A

SELECT ID
FROM table
WHERE code_01 = 'asd' AND code_02 = 'asds'

使用选项B

如果可以,请使用选项 B,因为它会产生更好的性能,因为它可以使用单个索引来搜索多个列。并且索引会更小。

关于sql - MySQL - 索引中有很多列?还是一个接一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com