MySQL联表查询的索引使用

MySQL联表查询的索引使用,第1张

一共3张表 knowledge , knowledge_question , knowledge_answer ,数据在 6000~10000 之间。 执行的语句: 执行时间约 10分钟 ,查看执行计划如下: 全部都是全表扫描,根据MySQL联表查询的算法 Nested-Loop Join ,MySQL查询的结果集是3张表的笛卡尔积,所以效率特别低。 耗时变成 20毫秒给Where条件建立索引,并不一定会使用。 比如:在表 knowledge 的字段 update 上建立索引 idx_time : 结果执行上来看,并没有使用索引 idx_time 。 如果where条件从 k.update_time>'2019-01-03 12:00:00' 修改为 k.update_time='2019-01-03 12:00:00' (从 >变成 = ) 则会使用索引 idx_time在建立索引的时候,会遇到 Table Metadata Lock 的问题,可以先 show processlist ,找到占用表锁的连接,然后 kill 。

显示一个表所有索引的SQL语句是:

show index from 数据库名.表名

查看某表某一列上的索引使用下面的SQL语句:

show index from 数据库名.表名 where column_name like '列名'

下面的SQL语句在我的数据库上执行成功:

show index from web.clubuser where column_name like 'user'。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/7574192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-07
下一篇 2023-04-07

发表评论

登录后才能评论

评论列表(0条)

保存