• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Mysql读语句优化一些好的习惯-yueliangdao0608,该如何处理

mysql 搞代码 7年前 (2018-06-01) 117次浏览 已收录 0个评论

mysql读语句优化一些好的习惯—-yueliangdao0608
1、
SELECT * FROM t WHERE YEAR(d) >= 1994;

SELECT * FROM t WHERE d >= ‘1994-01-01’;//这个好,相比上面的语句没有用year函数,
——————————————-
2、
SELECT * FROM Country ,CountryLanguage
WHERE Country.Code= CountryLanguage.CountryCode;

SELECT * FROM Country JOIN CountryLanguage
ON Country.Code= CountryLanguage.CountryCode;//这个好,显式说明了连接关系,以前好像在哪里看到过,记不起来了
——————————————-
3、
SELECT * FROM t WHERE id = ‘19’;

SELECT * FROM t WHERE id = 19;//id 设置成int类型的要比char或者archar的好?不是很明白
——————————————-
4、
SELECT * FROM t WHERE length(column_t) = 5;

SELECT * FROM t WHERE column_length=5; //这个也不明白

——————–
5、
SELECT * FROM t WHERE name LIKE ‘%de%‘

SELECT * FROM t WHERE name LIKE ‘de%’
SELECT * FROM t WHERE name >= ‘de’ AND name < ‘df‘//将like查询改成非like查询?具体例子什么意思不清楚
——————————————-
6、
SELECT * FROM t WHERE 1;

SELECT * FROM t WHERE 1 LIMIT 10;这个也不懂
——————————————-
7、
SELECT * FROM Country WHERE Name LIKE ‘M%’;

SELECT Name FROM Country WHERE Name LIKE ‘M%’;//只取需要的字段

在看yueliangdao0608的Mysql开发与优化的ppt时,看到了上面的sql,所以拿出来请教下

——解决方案——————–
1、
第二个,也就是 WHERE d >= ‘1994-01-01’;这个可以使用索引。

2、
效率上一样,好坏无法明确说明,这个一直存在争议。

3、
INT的速度会快一些。整数处理起来比字符串快。

4、
估计是让加个字段 column_length

5、
name LIKE ‘%de%‘肯定效率不好,但要看需求。

至于 name LIKE ‘de%’ 和 name >= ‘de’ AND name < ‘df‘/ 应该没有明显差距。不过需要做试验以确认。

6、
看MYSQL手册中的LIMIT 的作用

7、
如果不需要其它字段,当然不要列,这样,只需要处理你需要的字段,至少网络上可以少传不少字节。

——解决方案——————–
1.对于WHERE子句中的任何字段都不允许加函数 因为加函数了会导致 无法使用到索引

—- MySQL不支持函数索引,Oracle到支持,但是效率也会低一些

2.无必要,若是SQL复杂或3或3张以上表关联推荐此写法

3.可以使用到索引的,但是输出结果集中该字段会被隐形转换为 字符串了,若是后面再用此字段作ORDER BY等条件就无法继续使用索引了

4.这个要看设计的字段含义了

5.不能这么简单地转换,是未必的… 应该会出问题

6.WHERE 1 不影响查询结果或优化器,但这是很多程序员的不良习惯造成的

推荐一个PPT给大家参考:http://www.mysqlops.com/2011/05/25/mysql-training-ppt.html

#****************************************#
MySQL技术及运维自动化网:www.mysqlops.com

新浪微博账号:http://weibo.com/mysqlops
#****************************************# 

——解决方案——————–
1、
SELECT * FROM t WHERE YEAR(d) >= 1994;

SELECT * FROM t WHERE d >= ‘1994-01-01’;//这个好,相比上面的语句没有用year函数,

在WHERE里用了计算函数,索引将会失效.
——————————————-
2、
SELECT * FROM Country ,CountryLanguage
WHERE Country.Code= CountryLanguage.CountryCode;

SELECT * FROM Country JOIN CountryLanguage
ON Country.Code= CountryLanguage.CountryCode;//这个好,显式说明了连接关系,以前好像在哪里看到过,记不起来了

在连接中当然要显式了.如果不显式,有可能在执行计划时就出错.
——————————————-
3、
SELECT * FROM t WHERE id = ‘19’;

SELECT * FROM t WHERE id = 19;//id 设置成int类型的要比char或者archar的好?不是很明白

WHERE子句一般要求与数据库的类型相配.’19’ 相当使用了隐式转换.理由同1.
——————————————-
4、
SELECT * FROM t WHERE length(column_t) = 5;

SELECT * FROM t WHERE column_length=5; //这个也不明白

column_length 应该是一个字段名.把字段的长度在表里固定化.如果用了LEN函数,理由同一.导至全表扫描.
——————–


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Mysql读语句优化一些好的习惯-yueliangdao0608,该如何处理

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址