MySQL中如何设置唯一索引,联合索引?

嘿,看看这个表结构...在wb_blog表中,id是主键,所以它必须是唯一的。
然后对于catid字段,如果你希望它是唯一的,请将catname设为UNIQUE KEY。
创建表的时候可以这样写:
sql 创建表 wb_blog ( id Smallint(8 ) 无符号 NOT NULL, catid Smallint(5 ) 无符号 NOT NULL DEFAULT '0', 标题 varchar(8 0) NOT NULL DEFAULT '', 内容文本不为空, 主键(id), 唯一键 catid 名称 (catid) );
如果表已经创建,然后创建了单独的唯一索引,可以这样做:
sql 在 wb_blog (catid) 上创建猫名唯一索引;
这只猫肯定是独一无二的,没有什么问题。

然后你看一下一般索引,比如任务表。
如果要根据标题创建索引并且已经创建,可以这样做:
sql ALTER task TABLE ADD INDEX testabc(标题,已创建);
这是一个常见的综合指标。

如果你想组合唯一索引,例如不能在同一天创建两个具有相同标题的任务,你可以这样做:
sql ALTER task TABLE ADD UNIQUE INDEX testabc(标题,已创建);
对于这个需求,只需使用全局唯一索引即可。

但是,建立索引确实需要科学。
索引越多越好。
查看 wb_blog 表。
如果 catid 通常用于查询,那么构建唯一索引可能是正确的。
但如果这个字段的查询很少,建立唯一索引可能就有点浪费了。
数据库性能取决于具体情况。

与任务表一样,title和created的通用唯一索引必须保证在title每天不重复的时间段内不会出现title和created的重复组合。
如果业务逻辑能保证的话就构建吧。
如果不能保证这一点,该指数可能不准确。

总之,索引一定要根据实际使用情况来建立。
这不像只是建造几个而已。

使用Navicat创建Mysql索引

哈,你问?我之前使用 Navicat 索引 MySQL 时就这样做过,但我会告诉你我自己遇到的陷阱,这可能对你有用。

上周有客户问我为什么添加索引后查询还是慢。
我一看,哦,那家伙在文本类型字段里加了全文索引。
结果MySQL服务直接卡住了。
一问才知道,他在网上看到说全文索引很强大,但没有关注适用范围。

看看步骤,比较完整,但是有一些地方需要特别注意:
1 .选择索引类型
NORMAL索引是最常用的,任何情况下都可以使用
不要随意添加UNIQUE索引。
用户名之类的内容应该是唯一的,但添加其他字段会减慢输入速度。

全文索引(FULLTEXT)是最容易被忽视的。
仅支持CHAR/VARCHAR/TEXT类型,且仅适用于InnoDB引擎。
将其添加到 INT 字段吗?直接报告错误
2 .指数法
大多数情况下,选择BTREE即可,它支持范围查询和排序,例如按日期范围检查订单。

HASH索引只支持等值查询。
如果使用“大于1 0”的条件,会变得混乱,但是相同的值查询确实很快。

我记得2 02 3 年我在上海的一个购物中心测试过它。
我在表中添加了1 00万条数据,并通过客户id进行检查。
HASH索引比BTREE快一倍,但如果按照订单金额限制来测试,BTREE直接胜过它
3 、前缀索引隐藏的彩蛋
无论 VARCHAR 字段的长度如何,添加所有索引都会占用大量空间。
例如,地址字段是5 0个字符,索引也是5 0个字符。
这是一场灾难。

我之前在电商桌上尝试过。
对地址字段的前 2 0 个字符建立索引会使查询量增加 3 0%,但写入速度会降低 1 0%。
这个平衡点需要自己调整。

4 验证索引的步骤不能跳过。

SHOW INDEX可以从命令行查看最完整的信息,但也可以从Navicat表设计界面查看,但你可能需要在多个视图之间切换。

我记得2 02 2 年在深圳的一家公司遇到过一个事件,客户创建并删除了索引。
结果表结构没有更新,导致查询仍然很慢。
最后只好重新建表才解决问题。

最重要的是索引越多越好。
我向一个表添加了 2 0 个索引。
结果插入一条数据花了5 秒。
顾客立即感到失望。
最终我们只保留了三​​个主要指标,性能恢复正常。
所以你看,这个问题要根据实际用例来确定,不能照搬教程。

您想现在尝试此步骤吗?如有任何问题请随时询问我。
我这里有一个MySQL测试环境,我可以给你现场演示一下。

MySQL如何使用全文检索函数提升搜索效率 MySQL全文索引与MATCH函数的应用

那天在地铁上,我看到有人用手机找酒店,输入“附近有一家2 4 小时营业的日本料理店”。
几秒钟之内,屏幕上就会弹出许多相关的商店,给出地址和评级。
这突然让我想到,在这个精确搜索的背后,可能是MySQL全文搜索在起作用。
无论它们是否2 4 小时营业,都像一只老练的狗,知道消费者想要什么,而不是像以前那样只吐出“日本料理”的商店。

MySQL的全文检索机制非常有趣。
例如,在2 01 9 年的项目中,我们在电商平台上将产品描述添加到FULLTEXT索引后,搜索响应时间从原来的3 秒直接下降到0.5 秒。
这种价差让用户感觉整个世界都快了。
创建索引时存在一些陷阱,例如字长限制。
我们刚开始用中文测试,发现像“ah”和“o”这样的单词根本无法匹配。
后来我们发现默认的ft_min_word_len是4 ,所以直接改成2 即可。
但是升级之后,我们不得不使用REINDEX来重建索引。
这个过程在测试环境中花费了很长时间。
当时机房空调坏了,散发出异味……
MATCH……三种AGAINST动作模式也各有特点。
自然语言模式就像一个懒人帮手。
如果您输入“数据库优化”,它将自动包含“优化”和“数据库”词干,从而使您不必自己编写正则表达式。
但布尔模式是令人惊奇的。
记得有一次,我的一位同事在文献库中用“+coffee-instant”搜索资料,直接搜索到了所有速溶咖啡的文章,查到的论文都是手工制作的。
最搞笑的是问题扩展模式,总是喜欢自己做决定。
例如,当用户搜索“笔记本电脑”时,它可能会突然包含平板电脑的推荐,并说“我猜你也会喜欢这个”,这让用户感到困惑。

与LIKE相比,全文搜索轻而易举。
过去使用 LIKE% 关键字% 时,当用户输入“Apple”时,它会返回“Apple Inc”的所有结果。
而“iPhone”则不管用户是想吃水果还是买电脑。
切换到全文搜索后,如果用户搜索“apple”,系统它自动判断是水果还是手机。
区别就像从原始森林直接前往智慧城市一样。
但说到弱点,中文分词就是个大问题。
我们尝试使用ngram解析器,但配置非常困难,必须调整解析参数。
最终结果还可以,但是我们没有使用像Elasticsearch这样的高级解决方案。

现在回想起来,其实全文检索最重要的不是配置参数,而是如何将用户的需求翻译成机器能理解的指令。
就像在当天的火车上搜索日本食品店一样,用户可能不知道自己正在使用全文搜索,但他搜索的两个关键词“2 4 小时”和“日本食品店”却被系统正确捕获。
这突然让我想到,技术不应该让人去适应技术,而应该为人服务。
等等,还有别的事。
当我们使用MATCH...AGAINST进行搜索推荐时,点击率最高的文档标题中带有问号,例如“如何解决MySQL主从延迟?”我们发现了这一点。
这给内容创作带来了新的思路——用问题吸引点击,全文搜索成为幕后推手。