关于mysql处理百万级以上的数据时如何提高其查询速度的方法
最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法.
①.、应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描.
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
可以这样查询:
select id from t where num=10
union all
select id from t where name like '%c%'
若要提高效率,可以考虑全文检索.
对于连续的数值,能用 between 就不要用 in 了:
可以改为强制查询使用索引:
应改为:
select id from t where name like 'abc%'
①.0、不要在 where 子句中的"="左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引.
①.1、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使 用,并且应尽可能的让字段顺序与索引顺序相一致.
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(...)
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
有很多种方法可以优化:
数据库设置主从,进行读写分离;
数据分表,如按月份分表,需要统计数据就查总表;
优化查询语句,适当增加索引;
字段优化,对不常用或者没有必要的字段可以考虑放在另外一张表里,避免单表数据过大,字段过多.
那就用sphinx 技术,目前这个是最好的,没有之一.
下面是我百度百科弄过来的,怎么使用还得你自己看白皮书了.
Sphinx的主要特性包括:
高速索引 (在新款CPU上,近10 MB/秒);
高可用性 (单CPU上最大可支持100 GB的文本,100M文档);
提供良好的相关性排名
支持分布式搜索;
提供文档摘要生成;
提供从MySQL内部的插件式存储引擎上搜索
支持布尔,短语, 和近义词查询;
支持每个文档多属性;
支持断词;
办法就是一次性全查询出来,然后用PHP程序来处理,优点是减少数据库连接查询次数,提高效率,缺点就是,有可能会多写一部分php代码.看完小编介绍的mysql怎么查看函数php的处理速度要比循环查询要效率高.
大数据的话可以进行以下操作:
减少对数据库的读取,也就是减少调用数据库,
进行数据缓存,
利用数据库的自身优化技术,如索引等
精确查询条件,有利于提高查找速度