php - 多数据时 select count(*) 查询优化建索引的问题
问 题 InnoDB 的表类型,select count(*) where 条件后面 带12个查询值,不加索引 查50万条数据大概5秒, 想请问这种情况我是不是建索引列是最好的解决办法,顺便请问 一个索引列 和一个索引 的消耗相等吗,比如影响增删改的效率,空间大小等。 谢谢 解决方案 50万5秒太慢了。。需要根据你的查询条件建联合索引 你把查询语句也贴一下吧
164 2022-07-19
编程技术问答社区
mysql优化 - mysql 分页查询优化。
问 题 table 表中30万记录 id,自增主键, node,create_at 都有索引 但是没有联合索引 下面的语句查一次要8s左右, 可以预估随着数据的继续增加,速度会越来越慢。 最近在学习 mysql 查询优化 也看了很多文章,教程(但是没有系统的看mysql手册,不好意思) 请各位朋友指导下,如何优化,如果可以 请大概讲述下,怎么分析的,为什么使用xxxx方式优化就会有效。 谢谢各位。 EXPLAIN SELECT `id` FROM `table` WHERE `node` = 2 ORDER BY `create_at` DESC LIMIT 12 OFFSET 69996 ------------------------------------------------------------------------ id: 1 select_type: SIMPLE
294 2022-07-19
编程技术问答社区
mysql索引 - mysql的普通索引使用问题
问 题 mysql一般建表都会设置主键索引 然后对唯一性的字段设置唯一索引 但普通索引从来没用过 普通索引是在非唯一性 需要索引的地方用吗 有没有举例说明 是要对大多数的字段 都进行普通索引吗? 解决方案 建立索引和你要做哪些字段查询有关,主键是默认建立索引。其他字段,如果你要做查询,也是要建立索引,当然你也可以不建立索引,索引的目的是提高查询速度,但是会增加数据库的体积。不仅仅mysql,其他数据库都是如此。
264 2022-07-19
编程技术问答社区
mysql索引 - mysql 用户的消息查询问题
现在有个messages表存放用户消息: message_id | user_id | receiver_id 1 | 1001 | 1002 > 2 | 1002 | 1001 3 | 1001 | 1003 4 | 1003 | 1001 > 5 | 1001 | 1003 ... user_id为发送用户的ID,receiver_id为接收者的用户ID,1001用户给1002用户发送1条信息,1002用户给1001用户发了1条信息,1001用户与1002用户共2条消息,在这2条中取一条最新的消息(message_id:2),1001用户给1003用户发了2条消息,1003用户给1001用户发了1条信息,1001用户与1003用户共3条消息,在这3条中取一条最新的消息(message_id:5),以此类推,最后取10条用作分页。
222 2022-07-19
编程技术问答社区
java - mysql中key和index的区别
问 题 关于mysql数据库索引 key 是数据库的物理结构,处于模型层面的,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等。 index是数据库的物理结构,处于实现层面的,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。 索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。 Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引。 这个怎么理解啊?key和index的区别,能不能解释的实在一些,看了一些资料,还是不太明白。 解决方案 嗯这确实是比较容易混淆的地方。 在我们使用MySQL中可能压根不会注意这个问题,因为大多数情况下他们展示出来的效果都差不多,但是还是不能将他们划等号(至少理论上是这样) 索引(index)和约束(key
190 2022-07-19
编程技术问答社区
mysql - 为什么where条件中or加索引不起作用?
CREATE TABLE test ( id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', creator varchar(128) NOT NULL DEFAULT '0' COMMENT '创建人', gmt_create timestamp NULL DEFAULT NULL COMMENT '创建时间', modifier varchar(128) DEFAULT '0' COMMENT '修改人', gmt_modified timestamp NULL DEFAULT NULL COMMENT '修改时间', title varchar(64) DEFAULT NULL COMMENT '工单标题', category varchar(32) DEFAULT NULL COMMENT '工单类别', subject varchar(32) DEFAULT NULL COMMENT '工单类型', demand
218 2022-07-19
编程技术问答社区
java - bigint(20)、smallint(5)
问 题 CREATE TABLE `idc_logistics_assign_rules` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `sp_id` bigint(20) unsigned NOT NULL COMMENT '外键关联表ID', `creator` varchar(255) NOT NULL COMMENT '创建人工号', `gmt_create` datetime NOT NULL COMMENT '创建时间', `modifier` varchar(255) NOT NULL COMMENT '修改人工号', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `rule_name` varchar(255) NOT NULL COMMENT '规则名称', `rule_json_val` var
244 2022-07-19
编程技术问答社区
mysql优化 - mysql修改字段类型问题
问 题 各位老哥,小弟请教个问题,我有张mysql数据表,里边大概6W条记录,现在有个varchar类型字段改成int类型,该字段有建立索引的,我是不是应该先删除索引再改字段类型?或者有更好的方法? 解决方案 首先,数据结构尽可能不要改动 其次,如果非动不可,请先备份好数据,预防不测 最后,“字段是不是应该先删除索引再改字段类型”恐怕要看是什么样的索引吧。。。 最直接的办法应该是新建一张表,然后再导入数据 补充一句:其实,哪有什么更好的办法,尝试就对了!
334 2022-07-19
编程技术问答社区
mysql - 乐观锁,悲观锁, Innodb行锁,读锁,写锁 混乱了
问 题 最近在看有关锁的知识, 见到的名词那叫一个多啊, 完全懵逼了 1.乐观锁,悲观锁, Innodb行锁,读锁(共享锁),写锁(排他锁),意向共享/排他锁, 间隙锁, 更新锁 这些词太混乱了, 有没有资料理的比较清楚 到底之间都什么关系 2.乐观锁 : 网上的实现方案大部分都是说加一个 version 字段, 或者timestamp字段; 然后又找到一份如下方案,"在更新时候带入原始数据", 具体如下: 比方说,要把一个字段status从 yes 变为 no, update table set `status`=`no` where status='yes' 这三种方案, 最后一种也是乐观锁么? 最后一种在Innodb存储引擎下,innodb对更新语句不是会自动加排他锁么?这个排他锁应该是数据库的真正锁吧,怎么能是乐观锁? 况且很多资料都说排他锁就是悲观锁! 参考的资料如下: http://www.jianshu.com/p/a40f... ht
344 2022-07-19
编程技术问答社区
mysql索引 - mysql的表如何重新组织(或生成)索引?
1,背景描述 我有一个user表,表结构如下: 索引如下: 表中数据如下: 可以看到表中数据是按lastname排序的,这是因为在lastname, familyname, city上有一个多列索引,userid上的主键(索引)是后加的,所以userid是无序的。 mysql当中有没有一种方法可以重新生成(或组织)索引,让select userid, lastname from user这条语句的查询结果默认是按userid排序? 注意:不是强制使用索引select userid, lastname, from user force index(primary),而是重新生成或组织索引(reorganize)。 4月29日更新 其实,我这里是想问mysql是不是有某个命令可以对表中已有的索引进行重新组织,就是在表经过一段时间的更新、删除、插入操作后,数据会发生变化(结构不变),那么表的索引也就相应的会发生各种变化(比如底层的碎片等),那么是不是有一
240 2022-07-17
编程技术问答社区
mysql优化 - mysql 多表联合查询中有order by和sum的情况下,索引如何设计?
问 题 如果目前有一个sql语句需要用到两表联合查询并且要使用到group by和order by的话,如何设计索引比较好呢? 例子如下: SELECT a.*, b.sum (money) FROM a JOIN b ON a.id = b.u_id GROUP BY b. STATUS ORDER BY b.time 这个例子的话,既有a,b表的联合查询,又有对b表字段的sum()函数,还有对查询结果的分组和order by排序,如何设计索引来优化这样的查询呢,谢谢大家啦. 解决方案 这句查询好像没实际意义啊。如果单查b表,你会怎么写sql呢?我能写出的只有: SELECT SUM(money), status GROUP BY status 由于聚合的关系,u_id、time等列的内容都是不确定的,所以不知道你拿它们做排序、关联的目的是啥。
132 2022-07-17
编程技术问答社区
mysql优化 - mysql 5.7 not in != 索引有效,是为什么啊?更新了吗?
问 题 为什么我今天在5.7的mysql上,使用not in != 都使用上了索引,看了很多文章都写着索引会失效,是因为mysql更新了吗?那现在那些查询条件会导致索引失效 解决方案 not in或者!=会导致索引失效并不是绝对的 对于数据较为均匀的场景是会失效的 但是如果业务数据严重不均的字段加了索引的话是不一定失效的 mysql自己会做判断 并不是绝对判定不使用索引 比如表A性别列有男10000条女20条,当sex!=’男‘是可以使用索引的 同样的如果你sex='男'反而不会使用索引 mysql自己会选择最优的检索方式
284 2022-07-17
编程技术问答社区
mysql优化 - 关于mysql查询时索引失效及扫描行数大于数据总行数的疑问。
数据表使用innodb引擎,updated_at 字段使用普通索引。 三个问题: 对比前两条语句,第二条没有使用索引,我记得是扫描行数达到一定行数时会放弃使用索引,这个临界值是多少呢? 全表扫描是显示扫描行数是 70341 行,而数据总行数却只有 57087 行? select count(*) 使用了索引,但是也扫描了 70341 行,这个语句会产生性能问题吗?
1926 2022-07-17
编程技术问答社区
mysql优化 - mysql联合索引问题
有一张商品表,建立了联合索引如下 alter table 'product' add index 'm_o_c_s'('mid','ondelete','saled '); mysql查询语句如下 select * from product where mid=1 and ondelete=0 order by saled asc limit 0,15 使用explain分析查询上面语句时发现没使用联合索引,全表扫描了,结果如下 但是,当我把以上sql语句中的ondelete字段值改为1时,又能用到联合索引了 select * from product where mid=1 and ondelete=1 order by saled asc limit 0,15 请问各位大神,这是为什么呢,在我的系统中,ondelete=0的查询更多,且ondelete字段默认值时0。
188 2022-07-17
编程技术问答社区
php - 数据表两个字段分别建了索引,这两个字段联合查询能否使用索引呢?
问 题 如题,假设表中二个字段 type1 和 type2 都分别独立设置了索引,现在需要联合查询,即使用 where type1=111 and type2=222 请问这个查询会走索引吗?敬请高手解惑,多谢! 解决方案 会走其中一个索引,最好是建一个联合索引,筛选率高的字段放在前面
274 2022-07-17
编程技术问答社区
mysql索引 - mysql 频繁update一个非索引字段,会不会增加索引处理上的开销?
问 题 mysql 频繁update一个非索引字段,会不会增加索引处理上的开销? 我知道如果一个字段是索引字段并且频繁的更新这个字段,对更新性能是有影响的,但是如果这个字段不是索引相关字段,会不会影响其他索引的性能??????????求赐教 由以上问题衍生的问题: mysql插入数据获取主键问题: 我使用mybatis的insert ** ON DUPLICATE KEY UPDATE,有一个唯一索引A,我想要获得插入的主键,但是在有唯一索引冲突的时候就不会插入了也就获取不到主键,我想到的方法是使用ON DUPLICATE KEY UPDATE FUPDATE_COUNT=FUPDATE_COUNT+1,就是手动加一个字段FUPDATE_COUNT,并且每次insert的时候都去加1,这样每次不管有没有唯一索引的冲突,就都会返回主键了。请问这样对性能有没有影响?会不会影响索引使得索引更新? 解决方案 非索引字段由一个值变为另一个值并不会影响统计信息,所以
626 2022-07-17
编程技术问答社区
php - mysql查询优化问题?
问 题 select count(*) as aggregate from `call_records` where (`CallType` = 'dialout' and `CalledNo` = '12345678910'); 这条查询如何优化?前提是不能建立索引,因为这张表里面已经有好几个索引了,有可能导致锁表。 解决方案 是不是热数据,不是热数据就搞个脚本定时跑把统计的count存到另一个张统计表里去。 热数据的话你看看之前建的索引能不能搞成组合索引,因为B树从左开始,你建个(a,b,c)的,a和a,b和a,b,c都能用了,代码层的查询函数注意字段顺序。
136 2022-07-17
编程技术问答社区
mysql优化 - mysql like 模糊搜索
问 题 问题一 name like '%联想%' 是全表搜索,如何使用索引来优化查询? 有推荐用mysql 函数 locate/instr explain SELECT * FROM product where name like '%联想%'; explain SELECT * FROM product where LOCATE('联想',name)>0 ; explain SELECT * FROM product where instr(name, '联想')>0 ; 看着解释没什么区别啊,都是用了全表搜索 问题二 name like '%联想%' 是匹配的 XX联想XX。如何匹配 XX联XX XX想XX,现在是把搜索内容拆分了,name like '%联%' or name like '%
264 2022-07-17
编程技术问答社区