mysql数据1000万条,查询很慢,求解决方案

fffrttwertet 2017-04-07 03:45:19
表结构
id 主键
name varchar 50

SELECT * FROM `abc` WHERE name like '%123%' limit 0,10

SELECT count(*) FROM `abc` WHERE name like '%123%'

一个是查询10条记录,二个是统计总数

数据库引擎目前是使用的 MyISAM
...全文
12760 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
god de gold 2020-04-30
  • 打赏
  • 举报
回复
增加全文索:字段full 索引 设置mysql 文件: port = 3306 innodb_ft_min_token_size=1 ft_min_word_len=1 查询方式: MATCH(`字段名`) AGAINST('值')
文修 2019-07-11
  • 打赏
  • 举报
回复
楼主你好,建议如下
1:查询多的字段,如name,加上索引
2:查询字段,可以把字段写出来,不要用 select *
3:1000万的单张表,就算是针对阿里云的RDB(SSD,高度优化)都比较大,建议楼主考虑分表操作
Lbulang 2019-07-10
  • 打赏
  • 举报
回复
楼上都说了 索引这个是必须要的 %like%这种肯定不行,不管怎么写都慢,如果实在是要Like ,最好就是针对索引字段 SELECT * FROM `abc` WHERE name like '123%' limit 0,10 count(*)统计 改成Count(0), 如果name没索引,一千万数据估计要几十秒左右。建个索引,速度应该会在几秒之内。 SELECT count(0) FROM `abc` WHERE name like '123%'
AHUA1001 2019-04-02
  • 打赏
  • 举报
回复
试一下,不确定行不行。
SELECT * FROM `abc` WHERE NAME REGEXP '123' LIMIT 0,10;
SELECT COUNT(*) FROM `abc` WHERE NAME REGEXP '123' ;
StudyJavaStudy 2019-03-08
  • 打赏
  • 举报
回复
如果查询sql固定,可以通过预处理的方式处理 这个场景,建议用全文索引去查询,不能直接查数据库的
verejava 2018-08-11
  • 打赏
  • 举报
回复
dsl279879634 2018-08-07
  • 打赏
  • 举报
回复
like 的变量前面加了%,不走索引,所以慢。
MW_long 2018-07-21
  • 打赏
  • 举报
回复
全表扫描, name 加索引, like 前面的百分号确认好了去掉,这样能使用到索引
conqweal 2018-07-17
  • 打赏
  • 举报
回复
我这而才300W数据,,直接COUNT,不带任何查询条件,也慢,,直接where id>0,也慢
石头mjq5259 2017-04-21
  • 打赏
  • 举报
回复
首先查不要用* ,再有适当建索引,
ayay_870621 2017-04-13
  • 打赏
  • 举报
回复
你这种like前后加%的,加什么都没用,都慢,你看能不能从你的数据出发,拆分你的数据,不要用like查询
tianfang 2017-04-09
  • 打赏
  • 举报
回复
加索引,使用等于判断会很快
tianfang 2017-04-09
  • 打赏
  • 举报
回复
没好办法,like会全表扫描

8,028

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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