MySQL查询效率很慢的问题如何分析和解决?

问题描述

我从SQL SERVER 2000导入一个表到MYSQL 5.x里面,大约有30万条记录。当执行SELECT * FROM tablename;时用时(484 ms),当加上一个where条件,查询就变得很慢:SELECT * FROM tablename where type=1; (18.549 sec) [type为int类型]MYSQL加上where条件就变得很慢。请问这是为什么呢?在SQL SERVER 2000查询这个表,效率很高的。

解决方案

首先你的type这个字段有没有索引SHOW INDEX FROM mydb.mytable如果有索引的话,看看有没有用到索引EXPLAIN SELECT * FROM tablename where type=1如果没有就创建一个索引MYSQL加上where条件就变得很慢。请问这是为什么呢?如果你有主键的话,主键本身就是索引,你没有用where就在用主键这个索引,当然快
解决方案二:
来学习下!
解决方案三:
建议你重新测试一下第二个语句不会比第一个慢这么多的因为即使你没有索引,两个语句也都是全表扫描,耗时应该都一样慢。其中第一个没有where的查询,耗时仅484ms,重测一下。至于优化,参照楼上建议。

时间: 2024-10-08 01:11:53

MySQL查询效率很慢的问题如何分析和解决?的相关文章

如何提高MySQL查询效率?

mysql|sql|效率|查询 MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试.   l        使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查

MYSQL列类型选择与MYSQL查询效率

    4.3 列类型选择与查询效率    要选择有助于使查询执行更快的列,应遵循如下规则(这里,"BLOB 类型"应该理解为即包含B L O B也包含TEXT 类型):    ■ 使用定长列,不使用可变长列.这条准则对被经常修改,从而容易产生碎片的表来说特别重要.例如,应该选择CHAR 列而不选择VARCHAR 列.所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种占涞暮姆眩褂枚ǔば薪仁褂每杀涑さ男写砜斓枚唷?br>     ■ 在较短的列能够满足要求时不要

提高MySQL 查询效率的三个技巧第1/2页_Mysql

MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用.我在开发一个P2P应用的时候曾经使用MySQL来保存P2P节点,由于P2P的应用中,结点数动辄上万个,而且节点变化频繁,因此一定要保持查询和插入的高效.以下是我在使用过程中做的提高效率的三个有效的尝试. l        使用statement进行绑定查询 使用statement可以提前构建查询语法树,在查询时不再需要构建语法树就直接查询.因此可以很好的提高查询的效率. 这个方法适合于查询条件固定但查询非常频繁的场合. 使

详解Mysql多表联合查询效率分析及优化_Mysql

1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2         由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢

MySQL大表中重复字段的查询效率方法

MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考. 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较. 如果仅仅是查找数据库中name不重复的字段,很容易 SELECT min(`id`),`name`     FROM `table`     GROUP BY `name`;    但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值) 查询哪些字段是重复的也容易 SELECT `name`,c

找出mysql中like模糊查询效率低的sql语句

相比update和insert,一般查询应该是数据库中操作最频繁的.而在有些应用场景需要用到like模糊查询,那么对于大数据,查询的时候就要注意了.   现在来分析一下为什么like语句查询的效率会很低,测试数据共4000000条,如下图:     第一步:不使用索引 下图可以看出,不使用索引的时候普通查询与like查询的耗时相当,like略长,这也是必然的,因为它要进行额外的算法.     第二步:使用索引   如下图,使用索引后,普通查询的耗时基本算是秒查,非常快:而like查询还是耗时一秒

实战:MySQL Sending data导致查询很慢的问题详细分析

这两天帮忙定位一个mysql查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时候,查询的记录数才几万条,但查询的速度非常慢,大概要4~5分钟左右 [处理过程] 1)explain 首先怀疑索引没有建好,于是使用explain查看查询计划,结果如下: 从explain的结果来看,整个语句的索引设计是没有问题的,除了第一个表因为业务需要进行整表扫描外,其它的表都是通过索引访问

MySQL查询优化:LIMIT 1避免全表扫描提高查询效率_Mysql

在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率. 例如下面的用户表(主键id,邮箱,密码): 复制代码 代码如下: create table t_user( id int primary key auto_increment, email varchar(255), password varchar(255) ); 每个用户的email是唯一的,如果用户使用email作为用户名登陆的话,就需要查询出email对应的一条记录. SELECT * FROM t

mysql中提高Order by语句查询效率的两个思路分析_Mysql

因为可能需要对数据库的记录进行重新排序.在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考. 在MySQL数据库中,Order by语句的使用频率是比较高的.但是众所周知,在使用这个语句时,往往会降低数据查询的性能.因为可能需要对数据库的记录进行重新排序.在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考. 498)this.width=498;" border=0>  一.建议使用一个索引来满足Order By子句. 在条件允许