December 3, 2015
React相关学习资料
"\u003cp\u003eReact 入门实例教程: \u003ca href=\"http://www.ruanyifeng.com/blog/2015/03/react.html\"\u003ehttp://www.ruanyifeng.com/blog/2015/03/react.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact 入门实例教程实例: \u003ca href=\"https://github.com/ruanyf/react-demos\"\u003ehttps://github.com/ruanyf/react-demos\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact+Babal+WebPack: \u003ca href=\"https://github.com/ruanyf/react-babel-webpack-boilerplate\"\u003ehttps://github.com/ruanyf/react-babel-webpack-boilerplate\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact Router 使用教程: \u003ca href=\"http://www.ruanyifeng.com/blog/2016/05/react_router.html\"\u003ehttp://www.ruanyifeng.com/blog/2016/05/react_router.html\u003c/a\u003e \u003ca href=\"https://github.com/reactjs/react-router\"\u003ehttps://github.com/reactjs/react-router\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact学习资料: \u003ca href=\"http://www.infoq.com/cn/react1/\"\u003ehttp://www.infoq.com/cn/react1/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact中CSS样式模块: \u003ca href=\"https://css-modules.github.io/webpack-demo/\"\u003ehttps://css-modules.github.io/webpack-demo/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e深入浅出React(一):React的设计哲学 – 简单之美 \u003ca href=\"http://www.infoq.com/cn/articles/react-art-of-simplity\"\u003ehttp://www.infoq.com/cn/articles/react-art-of-simplity …\u003c/a\u003e\u003c/p\u003e"
December 2, 2015
React开发中的常见问题
"\u003cp\u003e当你在写react的时候报了类似于这样子的错:\u003cstrong\u003eEach child in an array or iterator should have a unique “key” prop.Check the render method of \u003ccode\u003exxxx\u003c/code\u003e. See \u003ca href=\"https://fb.me/react-warning-keys\"\u003ehttps://fb.me/react-warning-keys\u003c/a\u003e for more information.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e原因是这样子的:\u003cstrong\u003eReact can’t know that your array is static, so you get the warning. The most practical thing to do here is to write something like.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e解决办法只要在循环的每个子项添加一个key就行了,代码如下:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003evar names = [\u0026#39;Alice\u0026#39;, \u0026#39;Emily\u0026#39;, \u0026#39;Kate\u0026#39;];\n\nReactDOM.render(\n \u0026lt;div\u0026gt;\n {\n names.map(function (name, …\u003c/code\u003e\u003c/pre\u003e"
November 30, 2015
webpack使用教程
"\u003cp\u003e官方中文:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.css88.com/doc/webpack/concepts\"\u003ehttp://www.css88.com/doc/webpack/concepts/\u003c/a\u003e \u003ca href=\"https://webpack.js.org/guides/getting-started/\"\u003ehttps://www.webpackjs.com/guides/getting-started\u003c/a\u003e\n中文: \u003ca href=\"https://doc.webpack-china.org/guides/getting-started\"\u003ehttps://doc.webpack-china.org/guides/getting-started\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e经典入门(推荐): \u003ca href=\"https://github.com/ruanyf/webpack-demos\"\u003ehttps://github.com/ruanyf/webpack-demos\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e官方入门教程: \u003ca href=\"https://webpack.js.org/guides/getting-started/\"\u003ehttps://webpack.js.org/guides/getting-started/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eReact+Babal+WebPack: \u003ca href=\"https://github.com/ruanyf/react-babel-webpack-boilerplate\"\u003ehttps://github.com/ruanyf/react-babel-webpack-boilerplate\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eGitbook 英文原版: \u003ca href=\"http://christianalfoni.github.io/react-webpack-cookbook/\"\u003ehttp://christianalfoni.github.io/react-webpack-cookbook/\u003c/a\u003e\n中文版: \u003ca href=\"https://fakefish.github.io/react-webpack-cookbook/\"\u003ehttps://fakefish.github.io/react-webpack-cookbook/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e如何使用webpack …\u003c/strong\u003e\u003c/p\u003e"
November 5, 2015
基于SourceTree 下的 Git Flow 模型
"\u003cp\u003egitflow 开发流程参考: \u003ca href=\"http://blog.haohtml.com/archives/15317\"\u003ehttp://blog.haohtml.com/archives/15317\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e[\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/git_flow.png\" alt=\"git_flow\"\u003e][1]\n\u003cstrong\u003e基于SourceTree 下的 Git Flow 模型\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003esourceTree 是一个开源的git 图形管理工具,可下载mac版本,windows版本\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eGit Flow 是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e基本的操作流程\u003c/strong\u003e\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e先用sourceTree 创建本地git 项目,xxxProject,\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e在项目里面先提交一次 commit 一下,默认提交在了 master分支;\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e然后在 sourceTree工具 右上角,点击 GitFlow,开启git Flow 规范模型的开发\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e[\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/git-flow_1.png\" alt=\"git-flow_1\"\u003e][2]\u003c/p\u003e\n\u003cp\u003e如上图,在开启gitFlow 之后;\u003c/p\u003e\n\u003cp\u003e生产环境分支使用:master\u003c/p\u003e\n\u003cp\u003e开发分支使用:develop\u003c/p\u003e\n\u003cp\u003e当需要新增加功能,发布版本时,创建补丁修复bug时,分别有对应的 feature,release,hotfix前缀这样的分支\u003c/p\u003e\n\u003cp\u003e这样在项目的开发过程之中,管理项目分支就变得非常的规范了;\u003c/p\u003e\n\u003cp\u003e4:开启之后,我们的项目就回到 …\u003c/p\u003e"
November 4, 2015
Git忽略文件权限
"\u003cp\u003e默认git会记录文件的权限信息,如果文件的权限信息被修改,那么git也作为一个差异保存。但是我们有时候是不需要这方面的差异的(例如在Windows下使用Cygwin),这时需要关闭文件权限的检查。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/20230904181521.png\" alt=\"img\"\u003e\u003c/p\u003e\n\u003cp\u003egit中可以加入忽略文件权限的配置,具体如下:\u003c/p\u003e\n\u003cp\u003e$ git config core.filemode false\n$ git config \u0026ndash;list\u003c/p\u003e\n\u003cp\u003e也可以使用以下命令查看是否生效。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecat .git/config\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/20230904181513.png\" alt=\"img\"\u003e\u003c/p\u003e\n\u003cp\u003e还有一个小问题,在设置这个属性之前权限就混乱的话,是无法自动修复的。这时候,如果仅仅是权限混乱的话,直接\u003ccode\u003egit reset --hard\u003c/code\u003e恢复吧,git会将项目完全恢复到最近一次提交,包括权限。 \u003c/p\u003e"
November 1, 2015
git diff命令详解
"\u003cp\u003ediff里面a表示前面那个变量,b表示第二个变量\u003c/p\u003e\n\u003cp\u003eHEAD commit版本\nIndex staged版本\u003c/p\u003e\n\u003cp\u003ea、查看尚未暂存的文件更新了哪些部分,不加参数直接输入\ngit diff\n此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异\n也就是修改之后还没有暂存起来的变化内容。\u003c/p\u003e\n\u003cp\u003eb、查看已经暂存起来的文件(staged)和上次提交时的快照之间(HEAD)的差异\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit diff –cached\ngit diff –staged\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e显示的是下一次commit时会提交到HEAD的内容(不带-a情况下)\u003c/p\u003e\n\u003cp\u003ec、显示工作版本(Working tree)和HEAD的差别\ngit diff HEAD\u003c/p\u003e\n\u003cp\u003ed、直接将两个分支上最新的提交做diff\ngit diff topic master 或 git diff topic..master\u003c/p\u003e\n\u003cp\u003ee、输出自topic和master分别开发以来,master分支上的changed。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit diff topic…master\nChanges that occurred on the master branch …\u003c/code\u003e\u003c/pre\u003e"
October 26, 2015
使用brew cask来安装Mac应用
"\u003ch2 id=\"简介\"\u003e简介\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/phinze/homebrew-cask\"\u003e\u003ccode\u003ebrew cask\u003c/code\u003e\u003c/a\u003e 是一个用命令行管理 Mac 下应用的工具,它是基于 \u003ca href=\"http://brew.sh/\"\u003e\u003ccode\u003ehomebrew\u003c/code\u003e\u003c/a\u003e 的一个增强工具。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehomebrew\u003c/code\u003e 可以管理 Mac 下的命令行工具,例如 \u003ccode\u003eimagemagick\u003c/code\u003e, \u003ccode\u003enodejs\u003c/code\u003e,如下所示:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew cask install qq\nbrew cask install google-chrome\nbrew cask install evernote\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e而使用上 \u003ccode\u003ebrew cask\u003c/code\u003e 之后,你还可以用它来管理 Mac 下的 Gui 程序,例如 \u003ccode\u003eqq\u003c/code\u003e, \u003ccode\u003echrome\u003c/code\u003e, \u003ccode\u003eevernote\u003c/code\u003e 等,如下所示:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebrew cask install qq\nbrew cask install google-chrome\nbrew cask install evernote\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"安装\"\u003e安装\u003c/h2\u003e\n\u003ch3 id=\"安装-homebrew\"\u003e安装 homebrew\u003c/h3\u003e\n\u003cp\u003e用以下一行命令即可安装 homebrew\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eruby -e \u0026#34;$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e之后执行 \u003ccode\u003ebrew doctor\u003c/code\u003e 命令可以看看 \u003ccode\u003ehomebrew\u003c/code\u003e 的 …\u003c/p\u003e"
October 19, 2015
写好 Git Commit 信息的 7 个建议
"\u003cp\u003e这里推荐: \u003ca href=\"http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html\"\u003ehttp://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html\u003c/a\u003e\n\u003cstrong\u003e介绍: 为什么好的提交信息如此重要\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e当你随意浏览任一 git 仓库的日志,你很可能会发现其中的提交信息或多或少有点乱。举个例子,瞧一瞧我早先提交到 Spring 上的这些宝贝:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e$ git log –oneline -5 –author cbeams –before “Fri Mar 26 2009”\u003c/p\u003e\n\u003cp\u003ee5f4b49 Re-adding ConfigurationPostProcessorTests after its brief removal in r814. @Ignore-ing the testCglibClassesAreLoadedJustInTimeForEnhancement() method as it turns out this was one of the culprits in the recent build breakage. The classloader hacking causes subtle …\u003c/p\u003e\u003c/blockquote\u003e"
September 24, 2015
brew安装mysql为系统服务
"\u003cp\u003e默认情况下,使用brew install mysql 安装完mysql以后,需要手动启动mysql。为了方便以后使用,这里将mysql安装成系统服务。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ebrew info mysql\u003c/code\u003e 已经给了.plist文件,只需要load一下就可以,plist文件名不一定是\u003ccode\u003ecom.mysql.mysqld.plist\u003c/code\u003e, 可以先到 `brew –prefix mysql` 目录看下。具体如下:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emkdir -p ~/Library/LaunchAgents\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecp \u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003ebrew --prefix mysql\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003e/com.mysql.mysqld.plist ~/Library/LaunchAgents/\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elaunchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e其实 \u003ca href=\"http://stackoverflow.com/questions/8014500/autostart-mysql-on-boot-from-terminal\"\u003ehttp://stackoverflow.com/questions/8014500/autostart-mysql-on-boot-from-terminal\u003c/a\u003e 这里有说。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e cp \u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003ebrew --prefix mysql\u003cspan style=\"color:#e6db74\"\u003e`\u003c/span\u003e/*mysql*.plist …\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e"
September 19, 2015
Xcode7 使用NSURLSession发送HTTP请求出错
"\u003cp\u003e控制台打印:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eApplication Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app’s Info.plist file.\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e在iOS9 中,苹果将原http协议改成了https协议,使用 TLS1.2 SSL加密请求数据。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e解决方法:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e在info.plist中添加\nNSAppTransportSecurityNSAllowsArbitraryLoads\n\u003ctrue/\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2015/09/20150629175005991.png\"\u003e\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/20150629175005991.png\" alt=\"20150629175005991\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e官方文档:\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_13\"\u003ehttps://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_13\u003c/a\u003e\u003c/p\u003e"
September 19, 2015
xcode7下安装Alamofire第三方网络基础库
"\u003cp\u003e1.安装类库管理工具\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://code4app.com/article/cocoapods-install-usage\"\u003eCocoaPods安装和使用教程\u003c/a\u003e \u003ca href=\"https://github.com/Carthage/Carthage\"\u003e去中心化的依赖管理器Carthage\u003c/a\u003e (这里没有使用这个库)\u003c/p\u003e\n\u003cp\u003e2.安装Alamofire\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/Alamofire/Alamofire\"\u003ehttps://github.com/Alamofire/Alamofire\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e以下为在使用Cocopods管理Alamofire类库的前后项目结构图,项目名称为CocoaPodsDemo\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2015/09/cocoapods_1.png\"\u003e\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/cocoapods_1.png\" alt=\"cocoapods_1\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://blog.haohtml.com/wp-content/uploads/2015/09/cocoapods_2.png\"\u003e\u003cimg src=\"https://blog--static.oss-cn-shanghai.aliyuncs.com//uploads/2023/09/cocoapods_2.png\" alt=\"cocoapods_2\"\u003e\u003c/a\u003e\u003c/p\u003e"
September 10, 2015
git中 gitignore 文件的正确用法
"\u003cp\u003e使用 git 做代码管理工具时,设置 gitignore 是必不可少的流程,一些系统或者 IDE 会在目录下生成与项目不相关的文件,而这些文件我们不期望被提交到仓库之中。理解 gitignore 的 pattern 规则十分重要。\u003c/p\u003e\n\u003ch3 id=\"Pattern_规则\"\u003e\u003cstrong\u003ePattern 规则\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e关于 Pattern 规则,可以查看 git 的相关文档: \u003ca href=\"http://git-scm.com/docs/gitignore\"\u003ehttp://git-scm.com/docs/gitignore\u003c/a\u003e,大致有以下几点:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e空行不匹配任何内容,所以可以作为块分隔符;\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e#\u003c/code\u003e 开头表示注释,如果相匹配 \u003ccode\u003e#\u003c/code\u003e,可以在前面加一个反斜杠,即 \u003ccode\u003e\\#\u003c/code\u003e;\u003c/li\u003e\n\u003cli\u003e除非加了反斜杠,否则一连串的空格会被忽略;\u003c/li\u003e\n\u003cli\u003e如果在匹配的内容前面加上 \u003ccode\u003e!\u003c/code\u003e,则这些匹配过的部分将被移出,如果要匹配以 \u003ccode\u003e!\u003c/code\u003e 开头的内容,需要加上反斜杠,如 \u003ccode\u003e\\!important.txt\u003c/code\u003e;\u003c/li\u003e\n\u003cli\u003e如果一个匹配 pattern 后面有一个斜杠,如 \u003ccode\u003efoo/\u003c/code\u003e,则默认会匹配所有(包含父子文件夹)中的 foo 文件夹内容,并且它不会匹配单个的文件;\u003c/li\u003e\n\u003cli\u003e如果一个匹配 pattern 不包含斜杠,如 \u003ccode\u003efoo\u003c/code\u003e,Git 会将其作为一个 shell 的查找命令匹配内容。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e需要注意的\u003ccode\u003e**\u003c/code\u003e: …\u003c/p\u003e"
August 10, 2015
Mysql Innodb的两种表空间方式
"\u003cp\u003e要说表空间,Mysql的表空间管理远远说不上完善。换句话说,事实上Mysql根本没有真正意义上的表空间管理。Mysql的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间。只要在my.cnf里面增加innodb_file_per_table=1就可以从共享表空间切换到独立表空间。当然对于已经存在的表,则需要执行alter table MY_TABLE engine=innodb命令迁移数据。\u003c/p\u003e\n\u003ch1 id=\"共享表空间方式\"\u003e\u003cstrong\u003e共享表空间方式\u003c/strong\u003e\u003c/h1\u003e\n\u003cp\u003e由于是默认的方式,就暂且理解为Mysql官方推荐的方式。相对而言所有的数据都在一个(或几个)文件中,比较利于管理,而且在操作的时候只需要open这一个(或几个)文件即可,相对来说代价很低。\u003c/p\u003e\n\u003cp\u003e但问题是在数据达到以G为单位来计算的时候优劣逆转。一个大小惊人的文件很不利于管理,而且对于一个如此巨大的文件来说,读写它需要耗费的资源一样巨大。更加令人费解的是,MySQL竟然将索引和数据保存于同一个文件中,索引和数据之间尚存在资源争用,不利于性能的提升。你当然可以通过innodb_data_file_path的配置规划多个表空间文件,但MySQL的逻辑是“用满后增 …\u003c/p\u003e"
August 10, 2015
[MySQL优化案例]系列 — 索引、提交频率对InnoDB表写入速度的影响
"\u003cp\u003e本次,我们通过对比,明明白白的知道索引、提交频率对InnoDB表写入速度的影响,了解有哪些需要注意的。\u003c/p\u003e\n\u003cp\u003e先直接说几个结论吧:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1、关于索引对写入速度的影响:\na、如果有自增列做主键,相对完全没索引的情况,写入速度约提升 3.11%;\nb、如果有自增列做主键,并且二级索引,相对完全没索引的情况,写入速度约降低 27.37%;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e因此,\u003cstrong\u003eInnoDB表最好总是有一个自增列做主键\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e2、关于提交频率对写入速度的影响(以表中只有自增列做主键的场景,一次写入数据30万行数据为例):\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ea、等待全部数据写入完成后,最后再执行commit提交的效率最高;\nb、每10万行提交一次,相对一次性提交,约慢了1.17%;\nc、每1万行提交一次,相对一次性提交,约慢了3.01%;\nd、每1千行提交一次,相对一次性提交,约慢了23.38%;\ne、每100行提交一次,相对一次性提交,约慢了24.44%;\nf、每10行提交一次,相对一次性提交,约慢了92.78%;\ng、每行提交一次,相对一次性提交,约慢了546.78%,也就是慢了5倍;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e因此,\u003cstrong\u003e最好是等待所有事务结束后再批量提交,而不是每执行完一个SQL就提交一次\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e曾经 …\u003c/p\u003e"
August 10, 2015
[MySQL FAQ]系列 — 什么情况下会用到临时表
"\u003cp\u003e\u003cstrong\u003eMySQL在以下几种情况会创建临时表:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1、UNION查询;\n2、用到TEMPTABLE算法或者是UNION查询中的视图;\n3、ORDER BY和GROUP BY的子句不一样时;\n4、表连接中,ORDER BY的列不是驱动表中的;\n5、DISTINCT查询并且加上ORDER BY时;\n6、SQL中用到SQL_SMALL_RESULT选项时;\n7、FROM中的子查询;\n8、子查询或者semi-join时创建的表;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eEXPLAIN 查看执行计划结果的 Extra 列中,如果包含 ** \u003ca href=\"http://imysql.com/2015/06/14/mysql-faq-what-important-information-in-explain.shtml\"\u003eUsing Temporary\u003c/a\u003e** 就表示会用到临时表。\u003c/p\u003e\n\u003cp\u003e当然了,如果临时表中需要存储的数据量超过了上限( \u003ca href=\"https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_tmp_table_size\"\u003etmp-table-size\u003c/a\u003e 或 \u003ca href=\"https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_heap_table_size\"\u003emax-heap-table-size\u003c/a\u003e 中取其大者),这时候就需要生成基于磁盘的临时表了。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e在以下几种情况下,会创建磁盘临时表:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1、数据表中包含BLOB/TEXT列;\n2、在 GROUP BY 或者 DSTINCT 的列中有超过 512字符 的字符类型列(或者超过 512字节的 二进制类型列,在5.6.15之前只管是否超过512字节);\n3、 …\u003c/code\u003e\u003c/pre\u003e"