当前位置: 首页 > news >正文

广州专业做网站的公司手机中关村在线报价大全

广州专业做网站的公司,手机中关村在线报价大全,广州网站推广电话,做搜狗网站优化点击在这之前先说明几个概念#xff1a; 1、驱动表和被驱动表#xff1a;驱动表是主表#xff0c;被驱动表是从表、非驱动表。驱动表和被驱动表并非根据 from 后面表名的先后顺序而确定#xff0c;而是根据 explain 语句查询得到的顺序确定#xff1b;展示在前面的是驱动表 1、驱动表和被驱动表驱动表是主表被驱动表是从表、非驱动表。驱动表和被驱动表并非根据 from 后面表名的先后顺序而确定而是根据 explain 语句查询得到的顺序确定展示在前面的是驱动表后面的是非驱动表。 2、关联查询的类型非为内连接(inner join)、左外连接(left join)、右外连接(right join)、全外连接(full join); 一、关联查询优化 1、整体效率比较:INLJBNLJSNLJ(这些值在EXPLAIN语句中Extra字段展示) 2、永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)(小的度量单位指的是 表行数每行大小 #推荐 select t1.b,t2.* from t1 Istraight_join t2 on(t1.bt2.b)where t2.id188; #不推荐 select t1.b,t2.* from t2 straight_join t1 on (t1.bt2.b) where t2.id108; 3、为被驱动表匹配的条件增加索引(减少内层表的循环匹配次数) 4、增大join buffer size的大小(一次缓存的数据越多那么内层包的扫表次数就越少). 5、减少驱动表不必要的字段査询(字段越少join buffer 所缓存的数据就越多) 实践得到以下结论 结论1对于内连接来说查询优化器可以决定谁来作为驱动表谁作为被驱动表出现 结论2对于内连接来讲如果表的连接条件中只能有一个字段有索引则有索引的字段所在的表会被作为被驱动表 结论3对于内连接来说在两个表的连接条件都存在索引的情况下会选择小表作为驱动表。小表驱动大表 关联查询优化细节可参考视频教程上部和下部 二、子查询优化和排序优化(相关视频教程) 1、子查询是 MySQL 的一项重要的功能可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作 能够帮助我们通过一个 SQL 语句实现比较复杂的查询。但是子查询的执行效率不高。原因如下 (1) 执行子查询时MySQL需要为内层查询语句的查询结果建立一个临时表然后外层查询语句从临时表中查询记录。查询完毕后再撤销这些临时表。这样会消耗过多的 CPU 和 IO 资源产生大量的慢查询。 (2) 子查询的结果集存储的临时表不论是内存临时表还是磁盘临时表都不会存在索引所以查询性能会受到一定的影响。 (3) 对于返回结果集比较大的子查询其对查询性能的影响也就越大。 在MySQL中可以使用连接JOIN查询来替代子查询。连接查询不需要建立临时表其速度比子查询要快如果查询中使用索引的话性能就会更好。 2、在查询时不仅要在 WHERE 条件字段上加索引还要在在 ORDER BY 字段上添加索引因为在 MySQL 中支持两种排序方式分别是 FileSort 和 Index 排序。 ◆ Index 排序中索引可以保证数据的有序性不需要再进行排序效率更高。 ◆ Filesort 排序则一般在内存中进行排序占用 CPU 较多。如果待排结果较大会产生临时文件 IO 到磁盘进行排序的情况效率较低。 优化建议如下(这块的内容很详细具体实践一定要看教程) (1) SQL 中可以在 WHERE 子句和 ORDER BY 子句中使用索引目的是在 WHERE 子句中 避免全表扫描在 ORDER BY 子句避免使用 FileSort 排序。当然某些情况下全表扫描或者 FileSort 排序不一定比索引慢。但总的来说我们还是要避免以提高查询效率。 (2) 尽量使用 Index 完成 ORDER BY 排序。如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列如果不同就使用联合索引。 (3) 无法使用 Index 时需要对 FileSort 方式进行调优。 三、GROUP BY优化和分页查询优化(相关视频教程) 1、group by 的优化策略主要包含以下六点 (1) group by 使用索引的原则几乎跟order by一致 group by 即使没有过滤条件用到索引也可以直接使用索引。 (2) group by 先排序再分组遵照索引建的最佳左前缀法则 (3) 当无法使用索引列可以增大max_length_for_sort_data和sort_buffer_size参数的设置 (4) where效率高于having能写在where限定的条件就不要写在having中了 (5) 减少使用 order by和业务沟通能不排序就不排序或将排序放到程序端去做。Order by、group by、distinct 这些语句较为耗费 CPU数据库的CPU资源是极其宝贵的。 (6) 包含了order by、group by、distinct 这些查询的语句where 条件过滤出来的结果集请保持在1000行以内否则SQL会很慢。 2、一般分页查询时通过创建覆盖索引能够比较好地提高性能。一个常见又非常头疼的问题就是 limit 2000000,10此时需要MySQL排序前2000010 记录仅仅返回2000000-2000010 的记录其他记录丢弃查询排序的代价非常大。 EXPLAIN SELECT *FROM student LIMIT 2000000,10;优化思路一 在索引上完成排序分页操作最后根据主键关联回原表查询所需要的其他列内容。 EXPLAIN SELECT * FROM student t,(SELECT id FROM student ORDER BY id LIMIT 2000000,10) a WHERE t.id a.id;优化思路二 该方案适用于主键自增的表可以把 Limit 查询转换成某个位置的查询。 EXPLAIN SELECT * FROM student WHERE id 2000000 LIMIT 10;四、覆盖索引的使用(相关视频教程) 1、什么是覆盖索引 理解方式一索引是高效找到行的一个方法但是一般数据库也能使用索引找到一个列的数据因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据当能通过读取索引就可以得到想要的数据那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。 理解方式二非聚簇复合索引的一种形式它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列即建索引的字段正好是覆盖查询条件中所涉及的字段。 简单说就是索引列主键包含SELECT 到 FROM之间查询的列。 2、索引覆盖的好处 (1) 避免Innodb表进行索引的二次查询(回表) Innodb是以聚集索引的顺序来存储的对于Innodb来说二级索引在叶子节点中所保存的是行的主键信息如果是用二级索引查询数据在查找到相应的键值后还需通过主键进行二次查询才能获取我们真实所需要的数据。在覆盖索引中二级索引的键值中可以获取所要的数据避免了对主键的二次査询 减少了IO操作提升了查询效率。 (2) 可以把随机 IO 变成顺序 IO 加快查询效率 由于覆盖索引是按键值的顺序存储的对于 IO 密集型的范围査找来说对比随机从磁盘读取每一行的数据 IO 要少的多因此利用覆盖索引在访问时也可以把磁盘的随机读取的 IO 转变成索引查找的顺序IO 。 由于覆盖索引可以减少树的搜索次数显著提升查询性能所以使用覆盖索引是一个常用的性能优化手段。 3、索引覆盖的缺点 索引字段的维护总是有代价的。因此在建立冗余索引来支持覆盖索引时就需要权衡考虑了。这是业务 DBA或者称为业务数据架构师的工作。 五、索引条件下推(ICP)(相关视频教程) select * from a where key z and key like %a 以上查询语句在使用和不适用 ICP 两种场景如下 1、在不使用 ICP 索引扫描的过程 storage层只将满足index key条件的索引(key‘z’)记录对应的整行记录取出返回给server层回表 server 层对返回的数据使用后面的where条件(key like ‘%a’)过滤直至返回最后一行。 2、使用 ICP 扫描的过程 storage层首先将index key条件满足的索引(key‘z’)记录区间确定然后在索引上使用index filter进行(key like ‘%a’)过滤。将满足的index filter条件的索引记录才去回表取出整行记录返回server层。不满足index filter条件的索引记录丢弃不回表、也不会返回server层。 server 层对返回的数据使用table filter条件做最后的过滤。 3、ICP 的开启/关闭 ·默认情况下启用索引条件下推。可以通过设置系统变量 optimizer_switch 控制:index_condition_pushdown #打开索引下推 SET optimizer switchindex condition pushdownoff: #关闭索引下推 SET optimizer_switchindex_condition_pushdownon;4、ICP的使用条件 (1) 如果表访问的类型为 range、ref、eq_ref和ref_or_null 可以使用ICP (2) ICP可以用于 InnoDB 和MyISAM 表包括分区表 InnoDB和 MyISAM 表 (3) 对于 InnoDB 表ICP 仅用于二级索引’。ICP 的目标是减少全行读取次数从而减少 /0 操作。 (4) 当SQL使用覆盖索引时不支持ICP。为这种情况下使用ICP 不会减少 IO。 (5) 相关子查询的条件不能使用ICP 六、其他查询优化策略(相关视频教程) 1、EXISTS 和 IN 的区分 索引是个前提其实选择与否还会要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下效率是最高的。 2、COUNT(*)、COUNT(1)与COUNT(具体字段)效率 前提:如果你要统计的是某个字段的非空数据行数则另当别论毕竟比较执行效率的前提是结果一样才可以。 环节1COUNT(星)和COUNT(1)都是对所有结果进行COUNTCOUNT(星)和COUNT(1)本质上并没有区别二者执行时间可能略有差别不过你还是可以把它俩的执行效率看成是相等的。如果有WHERE子句则是对所有符合筛选条件的数据行进行统计如果没有WHERE子句则是对数据表的数据行数进行统计。 环节2如果是MyISAM存储引擎统计数据表的行数只需要O(1)的复杂度这是因为每张MyISAM的数据表都有一个meta信息存储了row_count值而一致性则是由表级锁来保证的。 如果是InnoDB存储引擎因为InnoDB支持事务采用行级锁和MVCC机制所以无法像MyISAM一样维护一个row_count变量因此需要采用扫描全表是O(n)的复杂度进行循环计数的方式来完成统计。 环节3在InnoDB引擎中如果采用COUNT(具体字段)来统计数据行数要尽量采用二级索引。因为主键采用的索引是聚簇索引聚簇索引包含的信息多明显会大于二级索引非聚簇索引。对于COUNT(*)和COUNT(1)来说它们不需要查找具体的行只是统计行数系统会自动采用占用空间更小的二级索引来进行统计。 如果有多个二级索引会使用key_len小的二级索引进行扫描。当没有二级索引的时候才会采用主键索引来进行统计。 3、关于SELECT(星) 在表查询中建议明确字段不要使用 * 作为查询的字段列表推荐使用SELECT 字段列表 查询。原因 (1) MySQL 在解析的过程中会通过查询数据字典将*按序转换成所有列名这会大大的耗费资源和时间。 (2) 无法使用覆盖索引 4、LIMIT 1 对优化的影响 针对的是会扫描全表的 SQL 语句如果你可以确定结果集只有一条那么加上LIMIT 1的时候当找到一条结果的时候就不会继续扫描了这样会加快查询速度。 如果数据表已经对字段建立了唯一索引那么可以通过索引进行查询不会全表扫描的话就不需要加上LIMIT 1了。 5、多使用 COMMIT 只要有可能在程序中尽量多使用 COMMIT这样程序的性能得到提高需求也会因为 COMMIT 所释放的资源而减少。 COMMIT 所释放的资源 (1) 回滚段上用于恢复数据的信息 (2) 被程序语句获得的锁 (3) redo / undo log buffer 中的空间 (4) 管理上述 3 种资源中的内部花费
http://www.hkea.cn/news/14281319/

相关文章:

  • 网站建设要代码有什么好处wordpress支付宝打赏
  • 积极参与网站信息建设工作个人网页代码html个人网页完整代码
  • 网站版面的美化原则wordpress 目录 导航站
  • 网站 网页数量logo设计 效果图
  • 怎么推广自己的网站链接集美那里有教网站建设
  • 英文网站 正文字体大小网站建设维护知识
  • asp图片源码网站博客系统 wordpress
  • 网站的结构包括哪些内容wordpress 主题公园
  • wordpress 修改主页网站seo在线诊断
  • 阿里云esc建设网站珠海高端网站开发
  • ios网站开发视频教程页面设计实训报告
  • 舟山网站制作江苏新宁建设集团网站
  • 网站如何做微信支付宝支付宝支付温州市城市基础设施建设网站
  • 孝感网站建设效果哈尔滨网站建设教学
  • asp网站制作软件网络营销相关政策有哪些
  • 自己建设网站容易吗游戏平台网页版
  • 多城市网站开发互联网广告精准营销
  • apache 本地网站下载app平台
  • 微信平台微网站开发贵州网站建站
  • 青海网站开发多少钱手机网站开发教程
  • 网站开发是叫系统吗wordpress仿导航大全
  • 学校让做网站做完怎么交做教育app的网站有哪些
  • 在哪家网站做推广好那个网站可以做视频app制作的
  • 网站模板工具久久w 网
  • 网站续费一般多少钱网站做推广赚钱项目
  • 琼海做网站成都互联网营销师培训
  • wordpress站点进入时弹窗wordpress创建搜索框
  • 金融网站建设网wordpress home
  • 用python做网站后端最快多久推广网站的文案
  • 建设pc端网站是什么意思wordpress 定时任务 hook