关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » MySQL »MySQL数据库优化SQL语句的步骤4

    MySQL数据库优化SQL语句的步骤4

    2010-05-14 14:12:00 出处:ITJS
    分享

    以上的文章我们讲过MySQL数据库优化SQL语句的前三步骤,今天我们就和大家一起来讲述MySQL数据库优化SQL语句的实际操作的第四步骤,以下就是文章的具体内容描述,望你在浏览之后会有所收获。

    1:索引的使用,索引的重要性就不说了,功能也不说了,只说怎么做. 首先要明确所有的MySQL(和PHP搭配之最佳组合)索引(Prima(最完善的虚拟主机管理系统)ry,unique,index)在b树中有存储.索引主要用语:

    a:快速找到where指定条件的记录 b:执行联结时,从其他表检索行 c:对特定的索引列找出max()和min()值

    d:如果排序或者分组在一个可用键的最前面加前缀,排序或分组一个表

    e:一个查询可能被用来MySQL数据库优化检索值,而不用访问数据文件.如果某些表的列是数字型并且正好是某个列的前缀,为了更快,值可以从索引树中取出

    2:存储或者更新数据的查询速度  grant的执行会稍稍的减低效率.

    MySQL(和PHP搭配之最佳组合)的函数应该被高度的优化.可以用benchmark(loop_count,expression)来找出是否查询有问题

    select的查询速度:如果想要让一个select...where...更快,我能想到的只有建立索引.可以在一个表上运行myisamchk--analyze来更好的MySQL数据库优化查询.可以用myisamchk--sort-index--sort-records=1来设置用一个索引排序一个索引和数据.

    3:MySQL(和PHP搭配之最佳组合)优化where子句

    3.1:删除不必要的括号:

    ((a AND b) AND c OR (((a AND b) AND (a AND d))))>(a AND b AND c) OR (a AND b AND c AND d)

    3.2:使用常数

    (ab>5 AND b=c AND a=5

    3.3:删除常数条件

    (b>=5 AND b=5) OR (b=6 AND 5=5) OR (b=100 AND 2=3) >b=5 OR b=6

    3.4:索引使用的常数表达式仅计算一次

    3.5:在一个表中,没有一个where的count(*)直接从表中检索信息

    3.6:所有常数的表在查询中在任何其他表之前读出

    3.7:对外联结表最好联结组合是尝试了所有可能性找到的

    3.8:如果有一个order by字句和一个不同的group by子句或者order by或者group by包含不是来自联结的第一个表的列,那么创建一个临时表

    3.9:如果使用了sql_small_result,那么msyql使用在内存中的一个表

    3.10:每个表的索引给查询并且使用跨越少于30%的行的索引.

    3.11在每个记录输出前,跳过不匹配having子句的行

    4:MySQL数据库优化left join

    在MySQL(和PHP搭配之最佳组合)中 a left join b按以下方式实现

    a:表b依赖于表a 

    b:表a依赖于所有用在left join条件的表(除了b)

    c:所有left join条件被移到where子句中

    d:进行所有的联结MySQL数据库优化,除了一个表总是在所有他依赖的表后读取.如果有一个循环依赖,那么将发生错误

    e:进行所有的标准的where优化 f:如果在a中有一行匹配where子句,但是在b中没有任何匹配left join条件,那么,在b中生成的所有设置为NULL的一行

    g:如果使用left join来找出某些表中不存在的行并且在where部分有column_name IS NULL测试(column_name为NOT NULL列).那么,MySQL(和PHP搭配之最佳组合)在它已经找到了匹配left join条件的一行后,将停止在更多的行后寻找

    5:MySQL数据库优化limit

    a:如果用limit只选择一行,当MySQL(和PHP搭配之最佳组合)需要扫描整个表时,它的作用相当于索引

    b:如果使用limit#与order by,MySQL(和PHP搭配之最佳组合)如果找到了第#行,将结束排序,而不会排序正个表

    c:当结合limit#和distinct时,MySQL(和PHP搭配之最佳组合)如果找到了第#行,将停止

    d:只要MySQL(和PHP搭配之最佳组合)已经发送了第一个#行到客户,MySQL(和PHP搭配之最佳组合)将放弃查询

    e:limit 0一直会很快的返回一个空集合.

    f:临时表的大小使用limit#计算需要多少空间来解决查询

    6:MySQL数据库优化insert

    插入一条记录的是由以下构成:

    a:连接(3)

    b:发送查询给服务器(2)

    c:分析查询(2)

    d:插入记录(1*记录大小)

    e:插入索引(1*索引)

    f:关闭(1)

    以上数字可以看成和总时间成比例

    改善插入速度的一些方法:

    6.1:如果同时从一个连接插入许多行,使用多个值的insert,这比用多个语句要快

    6.2:如果从不同连接插入很多行,使用insert delayed语句速度更快

    6.3: 用myisam,如果在表中没有删除的行,能在select:s正在运行的同时插入行

    6.4: 当从一个文该篇文章件装载一个表时,用load data infile.这个通常比insert快20 倍

    3.6:所有常数的表在查询中在任何其他表之前读出

    3.7:对外联结表最好联结组合是尝试了所有可能性找到的

    3.8:如果有一个order by字句和一个不同的group by子句或者order by或者group by包含不是来自联结的第一个表的列,那么创建一个临时表

    3.9:如果使用了sql_small_result,那么msyql使用在内存中的一个表

    3.10:每个表的索引给查询并且使用跨越少于30%的行的索引.

    3.11在每个记录输出前,跳过不匹配having子句的行

    4:MySQL数据库优化left join

    在MySQL(和PHP搭配之最佳组合)中 a left join b按以下方式实现

    a:表b依赖于表a 

    b:表a依赖于所有用在left join条件的表(除了b)

    c:所有left join条件被移到where子句中

    d:进行所有的联结优化,除了一个表总是在所有他依赖的表后读取.如果有一个循环依赖,那么将发生错误

    e:进行所有的标准的where优化 f:如果在a中有一行匹配where子句,但是在b中没有任何匹配left join条件,那么,在b中生成的所有设置为NULL的一行

    g:如果使用left join来找出某些表中不存在的行并且在where部分有column_name IS NULL测试(column_name为NOT NULL列).那么,MySQL(和PHP搭配之最佳组合)在它已经找到了匹配left join条件的一行后,将停止在更多的行后寻找

    5:MySQL数据库优化limit

    a:如果用limit只选择一行,当MySQL(和PHP搭配之最佳组合)需要扫描整个表时,它的作用相当于索引

    b:如果使用limit#与order by,MySQL(和PHP搭配之最佳组合)如果找到了第#行,将结束排序,而不会排序正个表

    c:当结合limit#和distinct时,MySQL(和PHP搭配之最佳组合)如果找到了第#行,将停止

    d:只要MySQL(和PHP搭配之最佳组合)已经发送了第一个#行到客户,MySQL(和PHP搭配之最佳组合)将放弃查询

    e:limit 0一直会很快的返回一个空集合.

    f:临时表的大小使用limit#计算需要多少空间来解决查询

    6:MySQL数据库优化insert

    插入一条记录的是由以下构成:

    a:连接(3)

    b:发送查询给服务器(2)

    c:分析查询(2)

    d:插入记录(1*记录大小)

    e:插入索引(1*索引)

    f:关闭(1)

    以上数字可以看成和总时间成比例

    改善插入速度的一些方法:

    6.1:如果同时从一个连接插入许多行,使用多个值的insert,这比用多个语句要快

    6.2:如果从不同连接插入很多行,使用insert delayed语句速度更快

    6.3: 用myisam,如果在表中没有删除的行,能在select:s正在运行的同时插入行

    6.4: 当从一个文该篇文章件装载一个表时,用load data infile.这个通常比insert快20 倍

    6.5:可以锁定表然后插入--主要的速度差别是在所有insert语句完成后,索引缓冲区仅被存入到硬盘一次.一般与有不同的insert语句那样多次存入要快.如果能用一个单个语句插入所有的行,锁定就不需要.锁定也降低连接的整体时间.但是对某些线程最大等待时间将上升.例如

    thread 1 does 1000 inserts  thread 2,3 and 4 does 1 insert  thread 5 does 1000 inserts  

    如果不使用锁定,2,3,4将在1和5之前完成.如果使用锁定,2,3,4,将可能在1和5之后完成.但是整体时间应该快40%.因为insert,update,delete操作在MySQL(和PHP搭配之最佳组合)中是很快的,通过为多于大约5次连续不断的插入或更新一行的东西加锁,将获得更好的整体性能.

    如果做很多一行的插入,可以做一个lock tables,偶尔随后做一个unlock tables(大约每1000行)以允许另外的线程存取表.这仍然将导致获得好的性能.load data infile对装载数据仍然是很快的.

    为了对load data infile和insert得到一些更快的速度,扩大关键字缓冲区.

    7优化update的速度

    它的速度依赖于被更新数据的大小和被更新索引的数量

    使update更快的另一个方法是推迟修改,然后一行一行的做很多修改.如果锁定表,做一行一行的很多修改比一次做一个快

    8MySQL数据库优化delete速度

    删除一个记录的时间与索引数量成正比.为了更快的删除记录,可以增加索引缓存的大小 从一个表删除所有行比删除这个表的大部分要快的多

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    IT头条

    Synology 对 Office 套件进行重大 AI 更新,增强私有云的生产力和安全性

    01:43

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    技术热点

    如何删除自带的不常用应用为windows 7减负

    MySQL中多表删除方法

    改进的二值图像像素标记算法及程序实现

    windows 7 32位系统下手动修改磁盘属性例如M盘修改为F盘

    windows 7中怎么样在家庭组互传文件

    Linux应用集成MySQL数据库访问技巧

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。