- 40
- 0
生成表和索引的sql:
DROP SCHEMA IF EXISTS sakila;
CREATE SCHEMA sakila;
USE sakila;
CREATE TABLE payment (
payment_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
-- 取消注释下面的列, 会对explain的结果产生影响
-- customer_id SMALLINT UNSIGNED NOT NULL,
amount DECIMAL(5,2) NOT NULL,
payment_date DATETIME NOT NULL,
last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
constraint id_UNIQUE
unique (payment_id)
);
alter table payment add index
idx_union_index_test (amount, payment_date, last_update);
explain:
explain select * from payment where
payment_date ='2006-02-15 22:12:32'
and last_update = '2006-02-15 22:12:32';
疑问:
如果注释掉customer_id列, 执行explain发现是使用了索引 idx_union_index_test 的, 但是根据"匹配最左前缀"原则, 应该无法利用到索引的啊
如果取消注释customer_id列, 再次生成表和索引并explain, 这个时候发现type=ALL了
为什么会产生这样不同的结果呢?
- 共 0 条
- 全部回答
-
無人相依偎 普通会员 1楼
在MySQL中,最左前缀匹配的规则是指在字符串中,左侧第一个字符与模式匹配时,查询将返回第一个匹配项的值。例如,如果模式为"apple",在字符串"apple apple banana"中,最左前缀匹配的结果将是"apple",因为左侧第一个字符"p"与模式匹配。
对于列数不同的表,最左前缀匹配的执行效果取决于以下几个因素:
-
表的列数:表中的列数越多,越难以找到最左前缀匹配的项。这是因为随着列数的增加,字符串的长度也会增加,查询的字符串长度也会增加,这将使最左前缀匹配变得更加困难。
-
数据类型:不同的数据类型可能会对最左前缀匹配产生影响。例如,字符串数据类型(如TEXT、CHAR等)通常允许字符串的长度不超过80个字符,这将限制最左前缀匹配的最大长度。如果表中的列数非常大,可能需要使用其他方法(如子查询、索引等)来提高查询性能。
-
字符集:某些字符集可能不支持最左前缀匹配。例如,一些字符集可能不支持左连接操作符(如LEFT JOIN、LEFT OUTER JOIN等),或者不支持特殊的字符,如反引号(')等。这些字符集可能会导致最左前缀匹配的执行效率较低。
-
数据库索引:在某些情况下,创建索引可以显著提高最左前缀匹配的执行效率。索引可以将模式作为查询的一部分,使其在表中的行数较少,从而提高查询性能。然而,创建索引需要在表中创建索引结构,并且索引的使用策略(如在左连接操作符中使用索引还是不使用索引)需要根据表的特点和查询需求进行决策。
综上所述,最左前缀匹配的执行效果可能受到表的列数、数据类型、字符集以及数据库索引等因素的影响。在实际应用中,需要根据具体的情况和需求,选择合适的匹配策略,以提高查询性能和效率。例如,对于列数较小、数据类型较简单的表,可以考虑使用"match"关键字来匹配模式,或者在子查询或联接操作符中使用索引,以提高最左前缀匹配的效率。对于列数较大、数据类型复杂或需要动态调整匹配策略的表,可能需要使用其他方法(如子查询、索引等)来提高匹配效率。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
