sql简单优化

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 whereorder by涉及的列上建立索引。

  • 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
  • 上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATEDELETE因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件
  • 建立索引会占用磁盘空间的索引文件。所以要慎用。
  • 一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
  • 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

2、应尽量避免where子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null  

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0    

3、应尽量避免where 子句中使用!=<>操作符,否则将引擎放弃使用索引而进行全表扫描。

SELECT id FROM article WHERE type_name='2' OR type_name='3'; 

可以这样查询:

SELECT id FROM article WHERE type_name='2' 
UNION ALL
SELECT id FROM article WHERE type_name='3';

ps:但是本人的查询结果显示,耗时并没有太大差别,可能是本人的数据库数据量不够的原因吧。。。

4 、字段类型使用方面

  • 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。 这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
  • 尽可能的使用varchar 代替 char,因为首先变长字段存储空间小,可以节省存储空间, 其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

5、任何地方都不要使用select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段。

猜你喜欢

转载自blog.csdn.net/she_lock/article/details/80116698