一. mysql对大小写是否敏感是根据平台区分的
1. 默认情况下: linux环境严格区分大小写,windows环境下不区分大小写** 【实战问题|mysql的大小写对性能的影响问题】所以正常开发的时候在本地测试数据库名或者表名大小写没关系,迁移到linux服务器的时候就会报错。一定要注意这个问题.
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
- 数据库名与表名是严格区分大小写的;
- 表的别名是严格区分大小写的;
- 列名与列的别名在所有的情况下均是忽略大小写的;
- 变量名也是严格区分大小写的;
# 编辑配置文件
vi /etc/my.cnf
# 在[mysqld]后添加添加
lower_case_table_names=1
# 重启服务
service mysqld stop
service mysqld start
二、sql语句的关键字大小写对sql语句性能的影响 1. 使用存储过程模拟20万数据
# 创建表
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
birth TIMESTAMP,
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
partition BY RANGE (store_id) (
partition p0 VALUES LESS THAN (10000),
partition p1 VALUES LESS THAN (50000),
partition p2 VALUES LESS THAN (100000),
partition p3 VALUES LESS THAN (150000),
Partition p4 VALUES LESS THAN MAXVALUE
);
# 创建存储过程
CREATE PROCEDURE BatchInsert(IN init INT, IN loop_time INT)-- 第一个参数为初始ID号(可自定义),第二个位生成MySQL记录个数
BEGIN
DECLARE Var INT;
DECLARE ID INT;
SET Var = 0;
SET ID = init;
WHILE Var < loop_time DO
insert into employees(id, fname, lname, birth, hired, separated, job_code, store_id) values (ID, CONCAT('chen', ID), CONCAT('haixiang', ID), Now(), Now(), Now(), 1, ID);
SET ID = ID + 1;
SET Var = Var + 1;
END WHILE;
END;
# 调用存储过程
CALL BatchInsert(30036, 200000);
-- 调用存储过程插入函数
测试关键字及字段名,表名大小写对sql执行时间的影响
select id ,fname lname ,birth ,hired ,separated,job_code,store_id from employees
# 0.605s0.610s 0.572S 平均值0.595SELECT id ,fname lname ,birth ,hired ,separated,job_code,store_id FROM employees
# 0.570S0.576s 0.594S平均值:0.580sSELECT ID ,FNAME LNAME ,BIRTH ,HIRED ,SEPARATED,JOB_CODE,STORE_ID FROM EMPLOYEES
# 0.634s 0.576s 0.575s平均值: 0595sselect id c1 ,fname c2, lname c3 ,birth c4 ,hiredc5,separated c6,job_code c7,store_id c8 from employees
# 0.629s 0.653s 0.685s 平均值:0.655sSELECT id c1 ,fname c2, lname c3 ,birth c4 ,hiredc5,separated c6,job_code c7,store_id c8 FROM employees
# 0.663s .0647s 0.625s 平均值:0.645sSELECT ID C1 ,FNAME C2, LNAME C3 ,BIRTH C4 ,HIREDC5,SEPARATED C6,JOB_CODE C7,STORE_ID C8 FROM EMPLOYEES
# 0.648s 0.645s 0.657s 平均值: 0.650s
总结:
- 同样一句sql,性能比较:关键字大写>所有语句大写>所有语句小写
- 为查询结果相同的sql,为每一列起别名以后使sql语句性能降低
- 建议在日常开发中将sql的关键字大写,以提高效率
推荐阅读
- #|Redis 如何实现库存扣减操作和防止被超卖((荣耀典藏版))
- #|请问Redis 如何实现库存扣减操作和防止被超卖()
- 后端|面渣逆袭(MySQL六十六问,两万字+五十图详解!有点六!)
- 数据库|2020年MySQL数据库面试题总结(50道题含答案解析)
- mysql|mysql limit 使用_mysql limit 使用方法实例解析
- #|详解MySQL架构设计及SQL执行流程
- MySql|数据库InnoDB-MVCC-多版本并发控制
- MySql|Mysql事务详解-[数据库的隔离级别、脏读、不可重复读、幻读以及ACID性质与redo log与undo log]
- mysql|大数据处理与开发课程设计——纽约出租车大数据分析