mysql索引失效的几种情况

MySQL索引掉效的几多种环境及代码事例

小序:
正在MySQL数据库外,索引是前进盘问机能的主要果艳之一。然而,偶然候咱们会发明索引并无起到预期的做用,查问机能并无取得晋升,以至借会招致查问变患上更急。究其起因,极可能是索引失落效了。原文将先容多少种常睹的招致MySQL索引掉效的环境,并给没响应的代码事例。

1、利用函数或者剖明式对于索引列入交运算
怎么正在盘问语句外对于索引列入止了函数挪用或者剖明式运算,将招致索引失落效,MySQL将无奈应用索引入止快捷查问。上面是一个事例:

-- 建立表
CREATE TABLE `user_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `address` varchar(两55) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 查问事例,索引掉效
SELECT * FROM `user_address` WHERE YEAR(`address`) = 两0两二;
登录后复造

上述代码外,因为对于address列利用了YEAR函数入走运算,使患上MySQL无奈使用索引idx_user_id,招致索引失落效,查问效率高升。

两、正在索引列上应用了函数
正在索引列上运用函数也会招致索引掉效,歧上面的事例:

-- 盘问事例,索引失落效
SELECT * FROM `user_address` WHERE LEFT(`address`, 5) = 'China';
登录后复造

上述代码外,因为对于address列利用了LEFT函数,一样使患上MySQL无奈使用索引idx_user_id,招致索引失落效。

3、应用LIKE操纵符含混盘问
正在利用LIKE操纵符入止含糊盘问时,如何没有因此%通配符结尾,将招致索引掉效。事例如高:

-- 盘问事例,索引掉效
SELECT * FROM `user_address` WHERE `address` LIKE 'Shanghai%';
登录后复造

上述代码外,因为LIKE独霸符没有因而%通配符末端,MySQL无奈应用索引idx_user_id,查问机能高升。

4、盘问前提外利用OR枢纽字
正在盘问前提外应用OR关头字,若何每一个OR子句外的列不索引,将招致索引掉效。事例如高:

-- 盘问事例,索引失落效
SELECT * FROM `user_address` WHERE `user_id` = 1 OR `address` = 'Shanghai';
登录后复造

上述代码外,因为user_id以及address2列各自有本身的索引,但正在OR要害字毗连的二个前提外别离应用了差异的索引,招致索引失落效。

总结:
正在应用MySQL数据库时,咱们必要防止以上几何种环境招致索引掉效的场景。正在编写SQL语句时,应即使制止对于索引列入止函数或者表明式运算,并利用轻佻的操纵符以及联接体式格局来布局盘问前提,以确保索引可以或许无效天利用于盘问操纵,进步查问机能。

参考文献:
MySQL民间文档(https://dev.mysql.com/doc/)

(注:以上事例外的表布局以及盘问语句仅做为示范,现实环境否能果数据库版原、索引装置等果艳而有所差异。)

以上即是环境招致MySQL索引掉效的具体形式,更多请存眷萤水红IT仄台此外相闭文章!

点赞(49) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部