Packed 指示关键字如何被压缩 。若没有被压缩,值为 NULL 。
Null 用于显示索引列中是否包含 NULL 。若列含有 NULL,该列的值为 YES 。若没有 , 则该列的值为 NO 。
Index_type 显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE) 。
Comment 显示评注 。
MySQL联表查询的索引使用一共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。
MYSQL索引问题:索引在查询中如何使用?假如你有一个表,
SQL CREATE TABLE test_tab (2 id INT,
3 name VARCHAR(10),
4 age INT,
5 val VARCHAR(10)6 );你的业务,有一个查询,是
SELECT * FROM test_tab WHERE name = 一个外部输入的数据
刚开始,数据不多的时候,执行效果还不错 。
随着数据量的增加,这个查询 , 执行起来,越来越慢了 。
然后在 name 上面 建立了索引
CREATE INDEX idx_test4_name ON test_tab (name );
这样,可以加快前面那个查询的速度 。
但是 , 某天,你执行了下面这个SQL , 发现速度又慢了
SELECT * FROM test_tab WHERE age = 25
为啥呢? 因为 age 字段上面,没有索引
索引只在 name 上面有
换句话说 , 也就是 WHERE 里面的条件,会自动判断,有没有 可用的索引,如果有, 该不该用 。
多列索引,就是一个索引,包含了2个字段 。
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '张%'
AND age = 25
这样的查询,将能够使用上面的索引 。
多列索引,还有一个可用的情况就是,某些情况下,可能查询,只访问索引就足够了,不需要再访问表了 。例如:SELECTAVG( avg ) AS 平均年龄FROMtest_tabWHEREname LIKE '张%'
这个时候,name 与 age 都包含在索引里面 。查询不需要去检索表中的数据 。
关于mysql怎么查询索引和mysql中查询索引的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 云虚拟主机企业网站设计,云虚拟主机企业网站设计思路
- sqlserver课程设计报告,sql server数据库设计与项目实践
- 游戏角色扮演叫,游戏角色扮演叫什么游戏
- ios能用黑苹果开发软件吗,黑苹果可以开发ios吗
- mysql版本怎么切换 mysql 切换用户
- 微信直播婉儿泡芙,微信直播婉儿泡芙是真的吗
- c语言中disc函数用法 c语言中disp
- 平板安卓和鸿蒙系统区别,平板安卓和鸿蒙系统区别
- 二手房销售如何做营销策划,二手房营销方案