【SQL】索引失效的11种情况
数据库调优的大致方向:
- 索引失效,没有充分利用到索引——建立索引
- 关联查询太多join——sql优化
- 服务器调优及各个参数设置——my.cnf
- 数据过多——分库分表
sql查询优化技术有很多,大体分为物理查询优化和逻辑查询优化:
- 物理查询优化:通过索引和表连接方式等技术进行优化
- 逻辑查询优化:通过SQL等价变换提升查询效率,就是换一种sql写法
数据准备:
CREATE DATABASE atguigudb2;
USE atguigudb2;
############# class 表 #################
CREATE TABLE `class` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`className` VARCHAR(30) DEFAULT NULL,
`address` VARCHAR(40) DEFAULT NULL,
`monitor` INT NULL ,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
############# student 表 #################
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`stuno` INT NOT NULL ,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`classId` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
#CONSTRAINT `fk_class_id` FOREIGN KEY (`classId`) REFERENCES `t_class` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
#################################
SET GLOBAL log_bin_trust_function_creators=1; # 不加global只是当前窗口有效。
#随机产生字符串
DELIMITER //
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT
'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
DECLARE return_str VARCHAR(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str =CONCAT(return_str,SUBSTRING(<