SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆分和修改 4.减少"烂"SQL由运维(DBA)和开发交流(确认),共同确定如何改,最终由DBA执行 5.制定开发流程 2 不适合走索引的场景 1.唯一值少的列上不适合建立索引或者建立索引效率低.例如:性别列 2.小表可以不建立索引,100条记录. 3.对于数据仓库,大量全表扫描的情况,建索…
一.索引可以有效地提升SELECT操作的性能,同时会影响UPDATE.CREATE和DELETE操作的性能.每种引擎对于表的索引有数量和长度的限制. 二.索引的设计原则 (A) 搜索的索引列,不一定是要选择的列,最适合索引的列是where子句的列或连接子句中的列. (B) 使用唯一索引,索引列的基础越大,索引的效果越好. (C) 使用短索引,如果对字符串列(char,varchar,text)索引,应该指定前缀长度,使用前缀索引. (D) 利用最左前缀,创建一个n列的索引时,实际是创建了MySQ…
先来看个例子: 1. 示例1:假设有如下的一张表: DROP TABLE IF EXISTS testTable; CREATE TABLE testTable ( ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id', HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name', PORT VARCHAR(64) NOT NULL COMMENT 'port', TYPE INT N…
单表扫描,MySQL索引选择不正确 并 详细解析OPTIMIZER_TRACE格式     一 表结构如下:  万行 CREATE TABLE t_audit_operate_log (  Fid bigint(16) AUTO_INCREMENT,  Fcreate_time int(10) unsigned NOT NULL DEFAULT '0',  Fuser varchar(50) DEFAULT '',  Fip bigint(16) DEFAULT NULL,  Foperate_…
索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而且会影响Insert/delete/update等语句的性能,因为当表中的数据更改同时,索引也会进行调整和更新. (2)避免对经常更新的表最好不要使用索引,并且索引中的列尽可能少,而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段. (3)数据量小的表最好不要使用索引,由于数据比较少,查询…
原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长.请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句…
规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎. 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节.另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的. 规则2:命名规则. 数据库和表名应尽可…
作者:沈杰 链接:https://www.zhihu.com/question/36996520/answer/93256153 来源:知乎 CREATE TABLE `student` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) DEFAULT NULL, `cid` ) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_cid_INX` (`name`,`cid`), KEY `name_INX` (`name`…
CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_cid_INX` (`name`,`cid`), KEY `name_INX` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARS…
作者:沈杰 链接:https://www.zhihu.com/question/36996520/answer/93256153来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 这是你的表结构,有三个字段,分别是id,name,cid CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAUL…