MySQL 优化学习之路

Overview

DB Level

  • table structure: column data type | table with few or many columns
  • right indexs
  • storage engine
  • data format: compression or not
  • locking strategy
  • caching size

Hardware Level

  • Disk seeks 10ms
  • Disk reading and writing. easier to optimize than disk seeks
  • CPU cycles large tables compared to the amount of memory ???
  • Memory bandwith when CPU needs more data to fit in CPU cache ???

SQL

  • use explain
  • indexs
  • avoid full table scan
  • analyze table periodically
  • read-only transactions 5.6.4+ // had read an article on ATA about this
  • avoid transforming query hard to read, optimizer will do this

SELECT

  • cover index: In some cases, MySQL can read rows from the index without even consulting the data file. If all columns used from the index are numeric, only the index tree is used to resolve the query. // need numeric ? TODO
  • range index
    • MySQL does not support merging ranges, use union
    • eq_range_index_dive_limit To permit use of index dives for comparisons of up to N equality ranges, seteq_range_index_dive_limit to N + 1
  • index extensions: add pk after each secondary index 5.6.9
  • two kinds of filesort
  • group by: loose index scan vs tight index scan, depends on distribution of column(cardinality).

INSERT

  • use INSERT statements with multiple VALUES lists to insert several rows at a time will be faster than using separate single-row INSERT statements.
  • bulk_insert_buffer_size for large INSERT
  • insert values explicitly only when the value to be inserted differs from the default.
  • Bulk insert speed up (https://dev.mysql.com/doc/refman/5.6/en/optimizing-innodb-bulk-data-loading.html)

Update

  • same with INSERT

DELETE

  • truncate

Optimizing INFORMATION_SCHEMA Queries

  • Try to use constant lookup values for database and table names in the WHERE clause
  • Write queries that minimize the number of table files that must be opened (???)
  • Use EXPLAIN to determine whether the server can use INFORMATION_SCHEMA optimizations for a query

Index

Index can improve the speed of determining rows which match where statements. But useless indexs are waste of space and time for db to determinie whcih index to use and need more time to create indexs when insert.

How MySQL use index

  • the most seletive indexs
  • leftmost prefix of the index
  • join:
    • use same data type will be faster // varchar and char are the same if their size equal.
    • must use the same character set when compare string columns
    • comparison of dissimilar column may prevent use of indexs
  • MIN() MAX() of column key_col will be O(1) if all key_part_N before key_col in where statement is constant.
  • cover index // here not mention numeric

Primary Key

  • use numeric pk

Foreign Key

  • split low-frequently data into separate table

Column Key

  • prefix index
  • fulltext for char varchar and text

Statistic

  • expr1 = expr2 is not true when expr1 or expr2 (or both) are NULL
时间: 2024-08-03 16:35:31

MySQL 优化学习之路的相关文章

mysql优化学习

mysql手册sql优化学习: BENCHMARK(1000000,1+1) 的理解: 执行右边表达式(1+1)1000000次. 该函数执行所返回的结果永远是0 英文参考理解:表达式必须是标量表达式.比如select 返回的是很多行,是一个结果集.那么执行该函数的时候并没有任何结果显示.失败了.返回的结果必须是单列或者是单行. 一.使用explain工具显示信息: explain语句结果信息的使用: id     select_type table     type     possible_

mysql优化之路----hash索引优化_Mysql

创建表 CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `msg` varchar(20) NOT NULL DEFAULT '', `crcmsg` int(15) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 //插入数据 insert into t1 (msg) values('w

大数据学习之路(持续更新中...)

在16年8月份至今,一直在努力学习大数据大数据相关的技术,很想了解众多老司机的学习历程.因为大数据涉及的技术很广需要了解的东西也很多,会让很多新手望而却步.所以,我就在自己学习的过程中总结一下学到的内容以及踩到的一些坑,希望得到老司机的指点和新手的借鉴. 前言 在学习大数据之前,先要了解他解决了什么问题,能给我们带来什么价值.一方面,以前IT行业发展没有那么快,系统的应用也不完善,数据库足够支撑业务系统.但是随着行业的发展,系统运行的时间越来越长,搜集到的数据也越来越多,传统的数据库已经不能支撑

MySQL入门学习(一)

mysql MySQL入门学习(一)  安装篇   PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合.在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选.本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考. 1.下载mysql-3.23.35-win.zip并解压: 2.运行setup.exe;选择d:\mysql,"tyical install" 3.启动mysql,有如下方法:   方法一:使用winm

站长做SEO要找到属于自己的优化学习金矿

大家好,我是虚子雨.之前谈到很多关于SEO方面的知识,但是很多的时候都是说到自己的一些经验,对于我自己的一些学习方法却从没有做过介绍,今天我要介绍的就是关于学习SEO方面的一些经验.学习学习,一是要找到有知识的地方,二是要找到学习的方法,三是要形成一套成熟的知识系统,这样的学习才是最好的学习方式.而要做到这三点,最开始的一点就是要找到自己的优化学习金矿. 大家谈到SEO,每个有经验点的站长都会有自己的一套优化学习方法,遇到不懂问题的时候都有自己的一套经验去学习研究解决,但是我们真的找到了自己的优

MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

[正文] 首先需要回顾一下上一篇文章中的内容:MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查询结果集. Statement通过以下方法执行一个查询操作: ResultSet executeQuery(String sql) throws SQLException  单词Query就是查询的意思.函数的返回类型是ResultSe

【JAVA秒会技术之玩转SQL】MySQL优化技术(一)

MySQL优化技术(一)         开发的路上,总会碰到一些老系统,越用越慢."慢"的原因也许有很多,但是,博主个人觉得,数据库的设计和sql语句写的好坏,对系统效率的影响是最直接,最显而易见的!所以,学习一下MySQL的优化,还是很有必要的.当然,博主能力有限,没那么多经验,更多的是"道听途说"和"纸上谈兵".如有不正之处,望大神开后给予指正,不胜感激! (一)MySQL优化技术概述 ①表的设计合理化(符合3NF,即符合"三范式

Webwork 学习之路(三)核心类 ServletDispatcher 的初始化

阅读目录 1. Webwork 与 Xwork 2.Webwork配置 3.核心类 ServletDispatcher 和 它的初始化 回到顶部 1. Webwork 与 Xwork      搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,WebWork2 被构建在XWork之上,以XWork为基础.通过使用XWork的命令模式框架和拦截器框架,提供了一个支持Web功能.能快速构建W

.Net程序员安卓学习之路4:使用xutils Get Post数据

原文:.Net程序员安卓学习之路4:使用xutils Get Post数据 前面使用了一些网络上找来的类进行网络访问,后来发现了安卓开发中有一个国人写的类库xutils比较全面,也比较经典,故后续使用xutils类库进行记录. 本例服务端使用WCF来实现,写好的WCF服务端在:http://www.cnblogs.com/madyina/p/3454741.html 下载部署即可 该服务说明如下: 这4个公开方法均返回一个User对象,其中最后一个还接收一个User对象. 下面我们就分别请求这4