• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL 联合索引与Where子句的优化 提高数据库运行效率

MySQL 联合索引与Where子句的优化 提高数据库运行效率

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql子句,mysql in子句,where子句,sql where子句,where子句语法错误等相关知识,希望本文的分享对您有所帮助
网站系统上线至今,数据量已经不知不觉上到500M,近8W记录了。涉及数据库操作的基本都是变得很慢了,用的人都会觉得躁火~~然后把这个情况在群里一贴,包括机器配置什么的一说,马上就有群友发话了,而且帮我确定了不是机器配置的问题,“深圳-枪手”热心人他的机器512内存过百W的数据里也跑得飞快,甚至跟那些几W块的机器一样牛(吹过头了),呵呵~~~

  在群友的分析指点下,尝试把排序、条件等一个一个去除来做测试,结果发现问题就出在排序部分,去除排序的时候,执行时间由原来的48秒变成0.3x秒,这是个什么档次的变化呀~~看着这个结果我激动ing.....

  于是我把涉及排序的字段组成一个联合索引alter table xx add index indexname(x1,x2,x3),经过2分钟创建新索引之后再执行同一个SQL语句,哇塞0.28S。。。。爽

  于是按照同样的思路把其它几个常用的SQL作了过些优化,效果马上见效

  过了30分钟再查slow sql记录文件,不好了,发现原来一个好好的SQL变得灰常慢了,神马情况?

  几经分析和测试原来就是因为添加了联合索引的原因,而且这个SQL语句当中有个or,当把这个or改用union之后问题排除。

  这回又得出一个心得:写SQL的时候千万别一时就手,随便写个就OK,那会为以为带来很严重的后果。

  再附上一段关于Where子句的执行顺序:

  在用MySQL查询数据库的时候,连接了很多个用,发现非常慢。例如:

  SELECT ... WHERE p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 1 AND p.products_id IN (472,474)

  这样查询需要20多秒,虽然在各个字段上都建立了索引。用分析Explain SQL一分析,发现在第一次分析过程中就返回了几万条数据:

  WHERE p.languages_id = 1 ,然后再依次根据条件,缩小范围。

  而我改变一下WHERE 字段的位置之后,速度就有了明显地提高:

  WHERE p.products_id IN (472,474) AND p.languages_id = 1 AND m.languages_id = 1 AND c.languages_id = 1 AND t.languages_id = 1

  这样,第一次的条件是p.products_id IN (472,474),它返回的结果只有不到10条,接下来还要根据其它的条件来过滤,自然在速度上有了较大的提升。

  经过实践发现,不要以为WHERE中的字段顺序无所谓,可以随便放在哪,应该尽可能地第一次就过滤掉大部分无用的数据,只返回最小范围的数据。

  希望能帮到有同样遭遇的朋友。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL 联合索引与Where子句的优化 提高数据库运行效率
  • 详解MySQL中WHERE子句的用法
  • MySQL中BETWEEN子句的用法详解
  • 简单介绍MySQL中GROUP BY子句的使用

相关文章

  • 2018-12-05oracle 日期函数
  • 2018-12-05C# 连接Access数据时总报找不到dbo.mdb的问题
  • 2018-12-05SQL 正则表达式及mybatis中使用正则表达式
  • 2017-05-11MySQL自增列插入0值的解决方案
  • 2018-12-05sql语句之表间字段值复制遇到的一些问题--基于mysql
  • 2018-12-05当忘记 SQL Server 管理员密码该如何处理
  • 2018-12-05MySQL关于字符串中数字排序的问题分析_MySQL
  • 2018-12-05简述数据库中ODBC与JDBC的应用
  • 2018-12-05Oracle数据库性能优化技术开发者网络Oracle
  • 2018-12-05ORACLE 10g 安装教程[图文]

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Mysql使用命令实现分级查找帮助的方法
    • 数据表增删改操作的图文详解(phpMyAdmin的使用教程2)
    • mysql 无限级分类实现思路
    • MySQL 教程之SQL库的基础操作
    • MySQL的Root密码如何重置
    • mysql导出导入中文表解决方法
    • mysql 服务完全卸载技巧
    • 总结MySQL的分区_MySQL
    • MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(500W单表)
    • mysql字符集和数据库引擎修改方法分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有