mysql 优化

sql 优化
1、建立表尽量用数字型。引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。


2、尽量少并且是合理的where条件。在多个条件的时候,把会提取尽量少数据量的条件放在前面


3、联表查询请给where 或者on的条件加上索引。最好不要用子查询,效率会很低


4、DISTINCT、COUNT、GROUP BY、各种MySQL函数这些操作慎用。
count的使用最好不要用count(*),最好用字段count(id)或者count(1).


5、合理的索引
建索引要建立在经常作为select条件的字段上。并且,值越单一效果越明显。
对于经常会做insert/update/delete的表建立索引要慎重,操作太多对索引的维护工作量也大。
*对那些记录数多的表,建议不要使用外键,以避免造成性能效率的严重降低。
对于使用like的查询,后面如果是常量并且只有%号不在第一字符,索引才能会被使用。如果like后面跟的是一个列的名字,那么索引也不会被使用。
如果列类型是字符串,那么一定记得在where条件中把字符常量值用引号引起来,否则即便这个列上有索引,Mysql也不会使用。因为MYSQL默认把输入的常量值进行转换以后才进行检索。

不要在建立的索引的数据列上进行下列操作:

a.对索引字段进行计算操作

b.在索引字段上使用not,<>,!=

c.在索引列上使用IS NULL和IS NOT NULL

d.在索引列上出现数据类型转换

e.在索引字段上使用函数

f.建立索引的列中使用空值


6、可以使用 exist 和not exist代替 in和not in。

例     SELECT * FROM ORDERS WHERE CUSTOMER_NAME NOT IN (SELECT CUSTOMER_NAME FROM CUSTOMER);

       SELECT *   FROM ORDERS WHERE CUSTOMER_NAME not exist (SELECT CUSTOMER_NAME FROM CUSTOMER);
       
7、不要在where条件中使用or
例如:select id from t where num=10 or num=20
替换:select id from t where num=10 union all select id from t where num=20;


8、在连续的值类,用between and .

select col from  table where time between '2010-06-01 00:00:00'and '2010-06-01 23:59:59'


select col from table where num >= 1 and num <=10;
select col from table where num between 1 and 19 union all select col from table where between 31 and 100;



select col from table where num !=10;

select col from table where num not exist (1,10);

你可能感兴趣的:(mysql优化)