MySQL优化项目中常用的19条
那么如何解决这个问题呢,答案:使用全文索引。在我们查询中经常会用到select id,fnum,fdst from dynamic_201606 where user_name like '%zhangsan%'; 。这样的语句,普通索引是无法满足查询需求的。庆幸的是在MySQL中,有全文索引来帮助我们。创建全文索引的SQL语法是:ALTER TABLE `dynamic_201606` ADD FULLTEXT INDEX `idx_user_name` (`user_name`);使用全文索引的SQL语句是:select id,fnum,fdst from dynamic_201606 where match(user_name) against('zhangsan' in boolean mode); 比如:select user_id,user_project from user_base where age*2=36;中对字段就行了算术运算,这会造成引擎放弃使用索引,建议改成:select user_id,user_project from user_base where age=36/2; 15、避免隐式类型转换where子句中出现column字段的类型和传入的参数类型不一致的时候发生的类型转换,建议先确定where中的参数类型。 16、对于联合索引来说,要遵守最左前缀法则 举列来说索引含有字段id、name、school,可以直接用id字段,也可以id、name这样的顺序,但是name;school都无法使用这个索引。所以在创建联合索引的时候一定要注意索引字段顺序,常用的查询字段放在最前面。 17、必要时可以使用force index来强制查询走某个索引 有的时候MySQL优化器采取它认为合适的索引来检索SQL语句,但是可能它所采用的索引并不是我们想要的。这时就可以采用forceindex来强制优化器使用我们制定的索引。 18、注意范围查询语句 对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效。 19、关于JOIN优化 LEFT JOIN A表为驱动表,INNER JOIN MySQL会自动找出那个数据少的表作用驱动表,RIGHT JOIN B表为驱动表。 注意: 1)MySQL中没有full join,可以用以下方式来解决: select * from A left join B on B.name = A.namewhere B.name is nullunion allselect * from B; 2)尽量使用inner join,避免left join: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |