请问个索引的问题

leetow2006 2019-07-10 07:48:31
我对MySql的索引有些不明白,我上网查了下,还是有问题请教。
比如我有个表tb,里面有个字段name,我创建了有个
索引:CREATE INDEX indexName ON tb(name);
那么是不是如果以后使用查询时,比如:
select * from tb where name='abc';
系统就自动会使用索引了?
另外:我创建的使用名称indexName没有看到在哪里使用?
(我过去学的AS/400,它里面有个叫逻辑文件的,与索引很像,
但是我在使用时,必须指定逻辑文件,可是我在mysql里没有
看到使用我过创建的索引,这是怎么回事)
...全文
57 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Edmond1023 2019-07-10
  • 打赏
  • 举报
回复
引用 2 楼 leetow2006 的回复:
那么如果select * from tb where name='abc';是不是也不一定会使用索引? 那么能不能强制使用索引呢?
建索引的目的就是加快查询,你这个问题没有意义。
leetow2006 2019-07-10
  • 打赏
  • 举报
回复
那么如果select * from tb where name='abc';是不是也不一定会使用索引?
那么能不能强制使用索引呢?
遇星 2019-07-10
  • 打赏
  • 举报
回复
1.MySQL优化器会根据统计信息,数据分布情况等去判断要不要使用这个索引,是自动判断,但不一定会使用; 2.索引的名称,一个方式是可以使用show index from test,来查看这个表上有哪些索引;另一个方式是,通过explain select ...,查看执行计划中的key列,就是优化器使用的索引名称。
文修 2019-07-10
  • 打赏
  • 举报
回复
mysql的引擎在执行查询语句时都会先判断查询条件是否是索引,如果是,就一定会使用,不需要强制什么的
遇星 2019-07-10
  • 打赏
  • 举报
回复
引用 2 楼 leetow2006 的回复:
那么如果select * from tb where name='abc';是不是也不一定会使用索引? 那么能不能强制使用索引呢?
可以强制使用索引的,这时候也就用到了索引的名称,例如name列上的索引名称是idx_name,那么想强制索引可以用以下语句: select * from tb force index(idx_name) where name='abc'; 但是一般优化器已经帮你判断是否使用索引,这种强制使用索引是在优化器出BUG的情况下使用。

56,682

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧